编译原理实验词法分析报告实验报告材料.doc
《编译原理实验词法分析报告实验报告材料.doc》由会员分享,可在线阅读,更多相关《编译原理实验词法分析报告实验报告材料.doc(10页珍藏版)》请在课桌文档上搜索。
1、一、实验目的(1) 理解词法分析的功能;(2) 理解词法分析的实现方法;二、实验内容PL0的文法如下为非终结符。:= 该符号的左部由右部定义,可读作“定义为。| 表示或,为左部可由多个右部定义。 表示花括号内的语法成分可以重复。在不加上下界时可重复0到任意次数,有上下界时可重复次数的限制。 表示方括号内的成分为任选项。( ) 表示圆括号内的成分优先。上述符号为“元符号, 文法用上述符号作为文法符号时需要用引号括起。程序=分程序分程序= 变量说明局部过程说明局部语句变量说明局部=VAR标识符,标识符:INTEGER;无符号整数=数字数字标识符=字母字母|数字过程说明局部=过程首部分程序;过程说明
2、局部;过程首部=PROCEDURE标识符;语句=赋值语句|条件语句|过程调用语句|读语句|写语句|复合语句|空赋值语句=标识符=表达式复合语句=BEGIN语句;语句END条件=表达式关系运算符表达式表达式=项加法运算符项 项=因子乘法运算符因子因子=标识符|无符号整数|(表达式)加法运算符=+|-乘法运算符=*关系运算符=|=|=条件语句=IF条件THEN语句字母=a|b|X|Y|Z数字=0|1|2|8|9实现PL0的词法分析三、实验分析与设计PL0词法分析程序是一个独立的过程,其功能是为语法语义分析提供单词,把输入的字符串形式的源程序分割成一个个单词符号传递给语法语义分析。其主要方法步骤为从
3、源程序扫描下一个字符,忽略空格、换行、TAB和注释并识别单词,再将不同类别的单词归类输出。四、实验的实现#include #include#include#include#include#definenorw 11 /norw-1个关键字#defineal 20 /最长的关键字的长度#define ID norw#define INT norw+1#define MA norw+2#define ENDF norw+3#define COLON norw+4#define SEMIC norw+5#define ADD norw+6#define MINUS norw+7#define MUL
4、TI norw+8#define EVALU norw+9#define LE norw+10#define NE norw+11#define LT norw+12#define EQ norw+13#define GE norw+14#define GT norw+15#define FLOAT norw+16char TOKEN20; /字符数组用来依次存放单词词文的各个字符extern int lookup(char *); /以TOKEN字符串查保存字表extern void report_error(char); /报告程序中的词法错误bool isalpha(char); /判断
5、接收字符是否为字母bool isalnum(char); /判断接收字符是否为字母或者数字bool isdigit(char); /判断接收字符是否为数字bool isannotation(char); /判断接收字符是否为注释extern char letter(char c); /用来将大写字母转化成小写字母FILE* fin;FILE* fout;void scanner()/词法分析的主体程序,对输入的文本文件进展词法分析char ch;int i,c;int error=0; /记录文件中词法错误的个数ch=fgetc(fin); /从输入文件中读取一个字符while(ch!=EOF
6、)/当从输入文件接收的字符不是文件完毕符时,执行循环if(isalpha(ch)/如果从输入文件接收的第一个字符是字母 ch=letter(ch);TOKEN0=ch;ch=fgetc(fin);i=1;while(isalnum(ch) ch=letter(ch);TOKENi=ch;i+;ch=fgetc(fin);TOKENi=0;c=lookup(TOKEN); /查保存字表if(c=0) fprintf(fout,(%d,%s)n, ID,TOKEN); /输出标识符else fprintf(fout,(%d,%s)n, c,TOKEN); /输出接收单词为保存字if(isdigit
7、(ch) /如果从输入文件接收的第一个字符是数字 int cdot=0; /统计小数点个数TOKEN0=ch;ch=fgetc(fin);i=1;while(isdigit(ch)|ch=.)/从第二个接收字符开始,当是数字或者是小数点时,执行循环if(ch=.) cdot+;TOKENi=ch;i+;ch=fgetc(fin);/重复接收字符,直到接收到非数字if(cdot=2) error+; TOKENi=0; printf(%s is errorn, TOKEN); break; if(isalpha(ch) /如果第二个字符是字母while(isalpha(ch) /接收完所有的字母
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 实验 词法 分析 报告 材料

链接地址:https://www.desk33.com/p-17187.html