欢迎来到天天文库
浏览记录
ID:50810624
大小:97.12 KB
页数:9页
时间:2020-03-14
《编译原理课程设计实验报告.docx》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、中 国 海 洋 大 学 实 验 报 告 姓名:邓汇星 专业年级:2012级计算机 学号:12020031016 同组人:窦猛专业年级:2012级计算机学号:12020031020 编译原理课程设计实验报告【实验题目】:实验1:用Lex设计词法分析器1【实验目的】:学会用lex设计一个词法分析器。【实验内容】:使用lex为下述文法语言写一个词法分析器。语言文法:<程序>àPROGRAM<标识符>;<分程序><分程序>à<变量说明>BEGIN<语句表>E
2、ND.<变量说明>àVAR<变量说明表>;<变量说明表>à<变量表>:<类型>
3、<变量表>:<类型>;<变量说明表><类型>àINTEGER
4、REAL<变量表>à<变量>
5、<变量>,<变量表><语句表>à<语句>
6、<语句>;<语句表><语句>à<赋值语句>
7、<条件语句>
8、
9、<复合语句><赋值语句>à<变量>:=<算术表达式><条件语句>àIF<关系表达式>THEN<语句>ELSE<语句>àWHILE<关系表达式>DO<语句><复合语句>àBEGIN<语句表>END<
10、算术表达式>à<项>
11、<算术表达式>+<项>
12、<算术表达式>-<项><项>à<因式>
13、<项>*<因式>
14、<项>/<因式><因式>à<变量>
15、<常数>
16、(<算术表达式>)<关系表达式>à<算术表达式><关系符><算术表达式><变量>à<标识符><标识符>à<标识符><字母>
17、<标识符><数字>
18、<字母><常数>à<整数>
19、<浮点数><整数>à<数字>
20、<数字><整数><浮点数>à.<整数>
21、<整数>.<整数><关系符>à<
22、<=
23、=
24、>
25、>=
26、<><字母>àA
27、B
28、…
29、X
30、Y
31、Z
32、a
33、b
34、…
35、x
36、y
37、z
38、<数字>à0
39、1
40、2
41、…
42、9【实验要求】:输入为用该语言所写的源程序文件;输出为记号序列,每个记号显示为二元组(记号名,记号属性值)的形式。输出可以在屏幕上,也可以输出到文件中。不要求建立符号表。在cygwin下用flex和gcc工具将实验调试通过,并能通过例子parser0中testcases目录下的test1.p测试例的测试。【实验参考】:exam1.l和exam2.l。请认真阅读例子,发现错误及时提出。【实验过程】:根据编译原理实验的exam1.l和exam2.l的代码进行修改,添加对一些符号的
43、定义,设计成为一个新的此法分析器,使得改词法分析器能够对实验要求的记号进行识别,识别效果如下:PROGRAMtest;VARi,j,k:INTEGER;f0:REAL;BEGINi:=1;j:=1;k:=0;f0:=3.2;WHILEk<=100DOBEGINIFj<20THENBEGINj:=i;k:=k+1;f0:=f0*0.2ENDELSEBEGINj:=k;k:=k-2;f0:=f0/.2ENDENDEND.【实验结果截图】;程序用flex和gcc编译调试通过后,以test1.p中的内容座位输
44、入进行词法分析得到以下结果:test1.p的内容如下:PROGRAMtest;VARi,j,k:INTEGER;f0:REAL;BEGINi:=1;j:=1;k:=0;f0:=3.2;WHILEk<=100DOBEGINIFj<20THENBEGINj:=i;k:=k+1;f0:=f0*0.2ENDELSEBEGINj:=k;k:=k-2;f0:=f0/.2ENDENDEND.【实验程序代码】/*把讨厌的注释去掉*/%{#include#defineLT1#defineLE2#def
45、ineGT3#defineGE4#defineEQ5#defineNE6#defineWHILE18#defineDO19#defineID20#defineNUMBER21#defineRELOP22#defineNEWLINE23#defineERRORCHAR24#define_PROGRAM25#define_VAR26#define_INTEGER27#define_REAL28#define_END29#define_THEN30#definefenhao31#definemaohao32
46、#definedouhao33#definejiahao34#definechuhao35#definedian36#definechenghao37#definejianhao38#define_BEGIN39#define_ELSE40%}delim[t]ws{delim}+letter[A-Za-z]digit[0-9]id{letter}({letter}
47、{digit})*number{digit}+(.{digit}+)?(E[+-]
此文档下载收益归作者所有