编译原理 - 语义分析 - 实验报告

时间:2022-11-21 18:34:17 作者:壹号 字数:3014字

编译原理实验三

语义分析

实验报告

? 学院:数学与计算机科学技术学院

? 专业:计算机科学与技术

? 班级:级计算机班

? 小组组员:

姓名: 学号: 姓名: 学号: 姓名: 学号: 姓名: 学号:

编译原理实验三:语义分析

实验题目

一、实验目的

要求学生用与实验2相同的语言,编制语义分析程序。

二、实验准备

微机CPU主频1.3G以上,128M内存,安装好C语言,PASCAL语言,或C++。

三、实验时间

13学时

四、实验内容

要求学生用与实验2相同的语言,编制语义分析程序。 定义该语言的语义成分,将语义分析程序编制成子程序,在实验2分析出各语法单位后,分析其含义,并将可执行语句或表达式翻译为四元式输出,并将错误信息输出。

实验报告必须包括设计的思路,以及测试报告(输入测试例子,输出结果)。

五、上交文档

1.实验报告(书面);

2.程序文件(通过网络提交)。

::= .

::=

::= const ; | ε

::= = | , =

1

编译原理实验三:语义分析

::= var ; |ε

::= | ,

::= procedure ; ; |ε

::= := | call

| begin end | if then | while do |

::= | ;

::= = | <> | < | > | <= | >=

::= | |

::= + | -

::= |

::= * | /

::= | | ( )

注意:

(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