东北大学秦皇岛分校编译原理课件第二章

东北大学秦皇岛分校编译原理课件第二章

ID:40407762

大小:274.56 KB

页数:45页

时间:2019-08-01

东北大学秦皇岛分校编译原理课件第二章_第1页
东北大学秦皇岛分校编译原理课件第二章_第2页
东北大学秦皇岛分校编译原理课件第二章_第3页
东北大学秦皇岛分校编译原理课件第二章_第4页
东北大学秦皇岛分校编译原理课件第二章_第5页
资源描述:

《东北大学秦皇岛分校编译原理课件第二章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第2章PL/0编译程序2.1PL/0语言和类pcode的描述2.2PL/0编译程序的结构2.3PL/0编译程序的语法语义分析2.4PL/0编译程序的错误处理2.5类pcode代码解释器本章目的:以PL/0为实例,学习编译程序实现的基本步骤和相关技术PL/0编译程序PL/0编译程序PL/0语言程序类pcode代吗源语言(PL/0)目标语言(类pcode)实现语言(pascal)PL/0类pcodepascalPL/0编译程序类pcode解释程序类pcode代码PL/0源程序输入输出PL/0编译系统

2、的结构框架PL/0语言PL/0程序示例PL/0的语法描述图PL/0语言文法的EBNF表示PL/0语言:PASCAL语言的子集PL/0程序示例CONSTA=10;(*常量说明部分*)VARB,C;(*变量说明部分*)PROCEDUREP;(*过程说明部分*)VARD; PROCEDUREQ;VARX;BEGIN READ(X);D:=X;WHILEX#0DOCALLP; END;BEGIN WRITE(D); CALLQ; END;BEGIN CALLP; END.Q的过程体p的过程体主程序体程序

3、分程序.内的文字表示非终结符或内的文字或符号表示终结符constidentnumber=,;varident,;;procedureident;分程序语句分程序PL/0语言文法的EBNF表示EBNF引入的符号(元符号):<>用左右尖括号括起来的语法成分为非终结符∷=(→)‘定义为’∷=(→)的左部由右部定义

4、‘或’{}表示花括号内的语法成分可重复任意次或限定次数[]表示方括号内的语法成分为任选项()表示圆括号内的成分优先例:用EBNF描述<整数>的定义:<整数>∷=[+

5、-]<数字>{<数字>}

6、 <数字>∷=0

7、1

8、2

9、3

10、4

11、5

12、6

13、7

14、8

15、9或更好的写法<整数>∷=[+

16、-]<非零数字>{<数字>}

17、0 <非零数字>∷=1

18、2

19、3

20、4

21、5

22、6

23、7

24、8

25、9 <数字>∷=0

26、<非零数字>PL/0语言是PASCAL语言的子集同PASCAL作用域规则(内层可引用包围它的外层定义的标识符),上下文约束,过程可嵌套定义,可递归调用子集数据类型,只有整型数据结构,只有简变和常数数字最多为14位标识符的有效长度是10语句种类过程最多可嵌套三层目标代码类pcode目标代码类pcode是一种假想栈式计

27、算机的汇编语言。指令格式:flaf功能码l层次差(标识符引用层减去定义层)a根据不同的指令有所区别指令功能表consta=10;varb,c; procedurep;begin c:=b+a; end;begin read(b); whileb#0do begin callp; write(2*c); read(b); end end.(0)jmp08转向主程序入口(1)jmp02转向过程p入口(2)int03过程p入口,为过程p开辟空间(3)lod13取变量b的值到栈顶(4)lit010取常数

28、10到栈顶(5)opr02次栈顶与栈顶相加(6)sto14栈顶值送变量c中(7)opr00退栈并返回调用点(16)(8)int05主程序入口开辟5个栈空间(9)opr016从命令行读入值置于栈顶(10)sto03将栈顶值存入变量b中(11)lod03将变量b的值取至栈顶(12)lit00将常数值0进栈(13)opr09次栈顶与栈顶是否不等(14)jpc024等时转(24)(条件不满足转)(15)cal02调用过程p(16)lit02常数值2进栈(17)lod04将变量c的值取至栈顶(18)opr

29、04次栈顶与栈顶相乘(2*c)(19)opr014栈顶值输出至屏幕(20)opr015换行(21)opr016从命令行读取值到栈顶(22)sto03栈顶值送变量b中(23)jmp011无条件转到循环入口(11)(24)opr00结束退栈PL/0编译程序的结构词法分析程序语法语义分析程序代码生成程序表格管理程序出错处理程序PL/0源程序目标程序PL/0编译程序的总体设计其编译过程采用一趟扫描方式以语法、语义分析程序为核心词法分析程序和代码生成程序都作为一个过程,当语法分析需要读单词时就调用词法分析

30、程序,而当语法、语义分析正确,需要生成相应的目标代码时,则调用代码生成程序。表格管理程序实现变量,常量和过程标识符的信息的登录与查找。出错处理程序,对词法和语法、语义分析遇到的错误给出在源程序中出错的位置和与错误性质有关的编号,并进行错误恢复。PL/0编译程序词法分析的设计与实现识别的单词:保留字或关键字:如:BEGIN、END、IF、THEN等运算符:如:+、-、*、/、:=、#、>=、<=等标识符:用户定义的变量名、常数名、过程名常数:如:10、25、100等整数界符:如:‘,’、‘.’、‘

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。