您的位置:首页 > 其它

编译原理程序设计实践(一) 项目描述

2013-02-28 01:35 323 查看
最近在辅导学生编译原理,x是实现PL0语言的词法分析器、语法分析器、语义分析器、代码生成器和代码模拟器。本着以身作则的思想,自己先花了两周时间完成了以上工作。这里将各阶段的主要工作成果发出来,供后来者参考。

相关参考资料

1、《编译原理》教材

作者:吕映芝 张素琴 蒋维杜

出版社:清华大学出版社

出版日期:1998年1月

2、PL/0语言编译程序分析

作者李凡希

地址:/article/1778493.html



项目描述

一、PL0语言的语法描述(参考教材2.1.2节)

大括号{ }表示该成分可以出现0次到任意次, 竖线 | 从中表示任选一种, 中括号[ ]表示最多出现一次,即可有可无。

程序            ∷= 分程序.   
分程序          ∷= [常量说明部分] [变量说明部分] [过程说明部分] 语句 
常量说明部分    ∷= CONST 常量定义 {,常量定义};   
常量定义        ∷= 标识符=无符号整数   
无符号整数      ∷= 数字{数字}   
变量说明部分    ∷= VAR 标识符{,标识符};   
标识符          ∷= 字母{字母|数字}   
过程说明部分    ∷= 过程首部分程序 {;过程说明部分} ;
过程首部       ∷= PROCEDURE 标识符 ;   
语句           ∷=       赋值语句
                    |   条件语句
                    |   当型循环语句
                    |   过程调用语句
                    |   读语句
                    |   写语句
                    |   复合语句
                    |   空语句   
赋值语句        ∷= 标识符 := 表达式   
复合语句        ∷= BEGIN 语句 {; 语句} END   
条件           ∷=     表达式 关系运算符 表达式
                    |   ODD  表达式   
表达式         ∷=   [+|-] 项 {加法运算符 项}    
项             ∷=   因子{乘法运算符因子}   
因子           ∷=  标识符|无符号整数|'('表达式')'   
加法运算符      ∷=    +|-   
乘法运算符      ∷=    *|/   
关系运算符      ∷=    # | = | < | <= | > | >=   
条件语句        ∷=    IF 条件 THEN 语句   
过程调用语句     ∷=    CALL 标识符   
当型循环语句     ∷=    WHILE 条件 DO 语句   
读语句          ∷=    READ  (标识符{,标识符} )   
写语句          ∷=    WRITE (表达式{,表达式} )


此外,为了方便,规定%作为行注释符,从%开始到行尾的所有字符均被忽略掉。





二、测试数据样例

以下代码是一个合法的PL0代码(教材P20)

const a=10;  
var b,c;
procedure p;
begin
c:= b+a
end
;
begin 
read(b);
while b#0 do
begin
call p
;write(2*c);
read(b)
end 
end
.




三、实际输出

1、指令表

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


2、模拟器运行效果



start pl0
?2
24
?4
28
?0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: