好文档 - 专业文书写作范文服务资料分享网站

《编译原理(实验部分)》实验2_PL0词法分析

天下 分享 时间: 加入收藏 我要投稿 点赞

《编译原理》(实验部分)

实验2_PL0词法分析

一、实验目的

加深和巩固对于词法分析的了解和掌握;初步认识PL/0语言的基础和简单的程序编写;通过本实验能够初步的了解和掌握程序词法分析的整个过程;提高自己上机和编程过程中处理具体问题的能力。

二、实验设备

1、PC 兼容机一台;操作系统为WindowsWindowsXP。

2、Visual C++ 6.0 或以上版本, Windows 2000 或以上版本,汇编工具(在Software 子目录下)。

三、实验原理

PL/O语言的编译程序,是用高级语言PASCAL语言书写的。整个编译过程是由一些嵌套及并列的过程或函数完成。词法分析程序是独立的过程GETSYM完成,供语法分析读单词时使用。

四、实验步骤

阅读所给出的词法分析程序(pl0_lexical.c),搞懂程序中每一个变量的含义,以及每一个过程的作用,并在该过程中进行中文注释;阅读完程序后,画出各过程的流程图;给出的程序包含两处输入错误,利用所给的pl/0源程序(test.pl0)对程序进行调试,使其能正确对所给文件进行分析并能够解释运行;在阅读懂所给出的词法分析程序后,将你对词法分析的理解写在实验报告上。

实验代码 #include main()

{ printf (\

主程序:

#include #include #include #include #include #define NULL 0 FILE *fp; char cbuffer;

char *key[8]={\ char *border[6]={\ char *arithmetic[4]={\

char *relation[6]={\ char *consts[20]; char *label[20];

int constnum=0,labelnum=0;

int search(char searchchar[],int wordtype) { int i=0;

switch (wordtype) { case 1:for (i=0;i<=7;i++) {

if (strcmp(key[i],searchchar)==0) return(i+1); };

case 2:{for (i=0;i<=5;i++) {

if (strcmp(border[i],searchchar)==0) return(i+1); };

return(0); }

case 3:{for (i=0;i<=3;i++)

{ if (strcmp(arithmetic[i],searchchar)==0) {

return(i+1); }; };

return(0); };

case 4:{for (i=0;i<=5;i++)

{ if (strcmp(relation[i],searchchar)==0) {

return(i+1); }; };

return(0); };

case 5:{for (i=0;i<=constnum;i++)

{ if (strcmp(consts[i],searchchar)==0) {

return(i+1); }; }

consts[i-1]=(char *)malloc(sizeof(searchchar)); strcpy(consts[i-1],searchchar); constnum++; return(i); };

case 6:{for (i=0;i<=labelnum;i++)

《编译原理(实验部分)》实验2_PL0词法分析

《编译原理》(实验部分)实验2_PL0词法分析一、实验目的加深和巩固对于词法分析的了解和掌握;初步认识PL/0语言的基础和简单的程序编写;通过本实验能够初步的了解和掌握程序词法分析的整个过程;提高自己上机和编程过程中处理具体问题的能力。二、实验设备1、PC兼容机一台;操作系统为WindowsW
推荐度:
点击下载文档文档为doc格式
7vmnr6gas48n6j4879hw6x2111f20r00bfa
领取福利

微信扫码领取福利

微信扫码分享