编译原理实验三
语义分析
实验报告
? 学院:数学与计算机科学技术学院
? 专业:计算机科学与技术
? 班级:级计算机班
? 小组组员:
姓名: 学号: 姓名: 学号: 姓名: 学号: 姓名: 学号:
编译原理实验三:语义分析
实验题目
一、实验目的
要求学生用与实验2相同的语言,编制语义分析程序。
二、实验准备
微机CPU主频1.3G以上,128M内存,安装好C语言,PASCAL语言,或C++。
三、实验时间
13学时
四、实验内容
要求学生用与实验2相同的语言,编制语义分析程序。 定义该语言的语义成分,将语义分析程序编制成子程序,在实验2分析出各语法单位后,分析其含义,并将可执行语句或表达式翻译为四元式输出,并将错误信息输出。
实验报告必须包括设计的思路,以及测试报告(输入测试例子,输出结果)。
五、上交文档
1.实验报告(书面);
2.程序文件(通过网络提交)。
1
编译原理实验三:语义分析
| begin
::= + | -
注意:
(1)
(2)
ε
::= odd
和
2
编译原理实验三:语义分析
实验报告
一.【需求分析】
1.PL/M机器的机器指令
LOD a 栈指针增1。装入a的值到栈顶。 STO a 存栈顶到a。栈指针减1。
LIT n 栈指针增1。 装入数n到栈顶。 ADD 栈顶两个元素相加。弹出这两个元素。存结果在栈顶。 MUL 栈顶两个元素相乘。弹出这两个元素。存结果在栈顶。 这些指令以源码形式由解释程序执行。
2. PL/M程序文本及修改
原文本:
P→S ;P | S;! S→id = E E→E + T | T T→T× F | F F→(E) |id |digit id→ a|b|??|z digit→0|1|??|9
添上必要的语义动作print()产生中间代码,及相应修改某些产生式 修改后的文本:
P1→S ;P2
P→S;! { print( END ) } S→id = E { print( STO id ) } E→T+ E { print( ADD ) }
3
编译原理实验三:语义分析
E→ T
…… 此处隐藏0字 ……
T→F ×T { print( MUL ) } T→F F→(E)
F→id { print( LOD id ) } F→digit { print( LIT n ) } id→ a|b|??|z digit→0|1|??|9
3.相应的语法图(摘至附录)
4