语义实验的报告材料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
语义分析实验报告
一:实验内容:用bison工具生成一个PL/0语言的语义分析程序,对PL/0源程序进行语义分析,并输出归约时产生的指令序列,然后输出结果。
二:实验环境:语法分析器生成工具:bison
•编程语言:C
三:源程序格式:
%{
声明--可选
%}
辅助定义--可选
%%
语法规则--必须有
%%
用户子程序--可选
四:设计思想
A.要求输出规约时所用的语法规则,所以考虑用pl0语言的EBNF范式(具体范式略)作为规约式的参考。
B.语法规则里,对词法分析出来的符号串给与特定的标记,然后将这个标记传给yyparse(),以便在语法分析时作为终结符。
C.在语法文件里将词法分析生成的lex.yy.c包括进来即可。具体源码请查看test.l和test.y文件。
五:测试说明
测试文件test1.pl0。
结果如下:
指令集合:
0 jmp 0 8
1 jmp 0 2
2 int 0 3
3 lod 1 3
4 lit 0 10
5 opr 0 2
6 sto 1 4
7 opr 0 0
8 int 0 5
9 opr 0 16
10 sto 0 3
11 lod 0 3
12 lit 0 0
13 opr 0 9
14 jpc 0 24
15 cal 0 2
16 lit 0 2
17 lod 0 4
18 opr 0 4
19 opr 0 14
20 opr 0 15
21 opr 0 16
22 sto 0 3
23 jmp 0 11
24 opr 0 0
符号表:
6 const val=0
1 const val=0
2 const aval=10
3 var blev=0 addr=3
4 var clev=0 addr=4
5 procplev=0 adr=2 size=3 结果集:
10?
40
六:心得体会
这次小程序的编写让我对编译程序的工作有了进一步的了解,让我的编译程序的原理及设计有了长足的进步,使我明白和更好的体会到了编译程序的作用。在这次的程序编写中,提高了自己的能力。