赵王酒41.8价格与图片:一个编译原理的课程设计,急急急

来源:百度文库 编辑:中科新闻网 时间:2024/05/06 06:01:10
实验要求:
通过通读PL/0的编译程序文本,写出规定语句的词法分析、语法分析程序,程序应具有的功能如下:
(1)从源程序文件中读取有效字符,并将其转换成二元组机内表示形式输出。
(2)对词法分析后的文本进行语法分析,并将语法分析的过程输出。
(3)对没有语法错误的句子生成四元式。(选作)
(3)课程设计要求独立完成,不允许有抄袭现象。
(4)课程设计完成后,要求提交源程序和上交课程设计报告(包括源程序清单)。
(附:课程设计报告格式)

四、实验内容:
1、基本规则说明:
为了便于掌握编译的核心内容,突出重点,简化编译程序的结构,同时又涵盖高级语言程序的基本结构,我们选取赋值语句、if语句和while语句作为代表,设计编译程序的前端,多定义的程序语句的产生式如下:

S → if B then S else S |
while B do S |begin L end| A
L →S;L |S
A→ i:=E
B→B and B |B or B | not B | (B) |i rop i| i
E→E+E | E*E |(E) |i

其中,各非终结符的含义如下:
S——语句;
L——语句串;
A——赋值句;
B——布尔表达式;
E——算术表达式;

各终结符的含义如下:
i——整形变量或常数,布尔变量或常数;
rop——六种关系运算符的代表:< <= <> > >= =
:= ——赋值号

关于表达式的运算,我们规定优先次序为:算术运算、关系运算、布尔运算;并从服从左结合规则。
规定的程序有一条语句或由begin和 end嵌套起来的符合语句组成。且语句末加上“#~”表示程序结束。

例如: while (a>b) do
Begin
If m>=n then a:=a+1
Else
While k=h do x:=x+2;
m=n+x*(m+y);
End
#~

2、单词的内部定义
词法分析器的功能是输入元程序,输出单词符号。我们规定输出的单词符号形式为:(单词种别,单词自身值);我们对单词给出内部定义:

符号 种别编码 说明
Sy_if 0 保留字if
Sy_then 1 保留字then
Sy_else 2 保留字else
Sy_while 3 保留字while
Sy_begin 4 保留字begin
Sy_do 5 保留字do
Sy_end 6 保留字end
a 7 赋值语句
Semicolon 8 “;”
e 9 布尔表达式
jinghao 10 “#”
S 11 语句
L 12 复合语句
tempsy 15 临时变量
EA 18 B and
EO 19 B or
plus 34 “+”
times 36 “*”
becomes 38 “:=”
Op_and 39 “and”
Op_or 40 “or”
Op_not 41 “not”
Rop 42 关系运算符
Iparent 48 “(”
rparent 49 “)”
ident 56 变量
intconst 57 整常量
注:单词自身的值对变量而言是指其在变量名表中的位置。

3、运行实例:
(1)源程序:
while (a>b) do
Begin
If m>=n then a:=a+1
Else
While k=h do x:=x+2;
m=n+x*(m+y);
End
#~
(2)运行后的结果:
词法分析结果:
3 0 /*(sy_while,0)*/
48 0 (“(”,0)
56 0 (变量,a)
.....

符号表
0 a
1 b
2 m..
.....
状态栈分析过程:
....
四元式分析结果:
100 (J>, a , b , 102)
101 (JMP, , , 117)
.......
整个要求就是这样,高手帮助啊!

回答:alkaid_pku
学长
4月14日 06:31 1. 预处理
2. 编译
3. 汇编
4. 查找库函数
5. 连接