资源描述:
《补充:PL0编译程序的实现ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第二章PL/0编译程序的实现本章目的:以PL/0为例学习编译程序实现的基本步骤和相关技术,熟悉并理解编译程序的基本原理和概念。1PL/0编译程序pcode解释程序PL/0源程序pcode代码注:此处的pcode代码专指PL/0的目标码,注意与传统pcode的区别2第二章PL/0编译程序的实现步骤1、认识源语言PL/0与目标代码pcode及它们之间的映射步骤2、PL/0编译程序的总体设计步骤3、PL/0编译程序词法分析的设计与实现步骤4、PL/0编译程序语法语义分析的设计与实现3第二章PL/0编译程序的实现步骤5、PL
2、/0编译程序代码生成的实现步骤6、PL/0编译程序语法错误处理的实现步骤7、pcode代码解释器的设计与实现4步骤1、认识源语言PL/0与目标代码pcode及它们之间的映射何为PL/0语言?认识目标代码pcodePL/0程序到pcode代码的映射5何为PL/0语言?PL/0语言:PASCAL语言的子集,功能简单,结构清晰,可读性强,具备了一般高级语言的必备部分PL/0程序示例PL/0的非形式描述PL/0的语法描述图PL/0语言文法的EBNF表示6PL/0程序示例CONSTA=10;VARB,C;PROCEDURE
3、P;VARD;PROCEDUREQ;VARX;BEGINREAD(X);D:=X;WHILEX#0DOCALLP;END;BEGINWRITE(D);CALLQ;END;BEGINCALLP;END.7PL/0非形式描述数据类型只有整型标识符的有效长度是10,以字母开始的字母数字串数最多为14位过程无参,可嵌套(最多三层),可递归调用变量的作用域同PASCAL,常量为全局的,无标号8PL/0非形式描述语句类型:赋值语句,if...then...,while...do...,read,wri
4、te,call,复合语句begin...end,说明语句:const...,var...,procedure…13个保留字:if,then,while,do,read,write,call,begin,end,const,var,procedure,odd9PL/0的语法描述图语句constidentnumber=,;varident,procedureident分程序分程序;;;分程序.程序10PL/0语言文法的EBNF表示BNF与EBNF的介绍BNF(BACKUS-NAURFORM)是根据美国的JohnW.Bac
5、kus与丹麦的PeterNaur来命名的,它从语法上描述程序设计语言的元语言。采用BNF就可说明哪些符号序列是对于某给定语言在语法上有效的程序。11PL/0语言文法的EBNF表示BNF与EBNF的介绍BNF引入的符号:<>用左右尖括号括起来的语法成分为非终结符∷=‘定义为’
6、‘或’EBNF引入的符号:{}表示花括号内的语法成分可重复[]表示方括号内的语法成分为任选项()表示圆括号内的成分优先12PL/0语言文法的EBNF表示BNF与EBNF的介绍一个用EBNF描述的例子:<整数>∷=[+
7、-]<
8、数字>{<数字>}<数字>∷=0
9、1
10、2
11、3
12、4
13、5
14、6
15、7
16、8
17、913PL/0语言文法的EBNF表示BNF与EBNF的介绍<整数>∷=[+
18、-]<非零数字>{<数字>}
19、0<非零数字>∷=1
20、2
21、3
22、4
23、5
24、6
25、7
26、8
27、9<数字>∷=0
28、1
29、2
30、3
31、4
32、5
33、6
34、7
35、8
36、914PL/0语言文法的EBNF表示PL/0语言文法的EBNF表示〈程序〉∷=〈分程序〉.〈分程序〉∷=[〈常量说明部分〉][〈变量说明部分〉][〈过程说明部分〉]〈语句〉〈常量说明部分〉∷=CONST〈常量定义部分〉{,〈常量定义〉
37、};〈无符号整数〉∷=〈数字〉{〈数字〉}〈变量说明部分〉∷=VAR〈标识符〉{,〈标识符〉};〈标识符〉∷=〈字母〉{〈字母〉
38、〈数字〉}……15认识目标代码pcode目标代码pcode是一种假想栈式计算机的汇编语言。指令格式flaf功能码l层次差a根据不同的指令有所区别16170jmp081jmp022int033lod134lit0105opr02次栈顶与栈顶相加6sto147opr008int05在运行栈中申请5个栈空间9opr016从命令行读入输入置于栈顶10sto03将栈顶值存入变量11cal02
39、调用过程12lod04将变量取至栈顶13opr014栈顶值输出至屏幕14opr015换行15opr00SL0DL0RA0变量1变量2RA12SL0DL0运行栈consta=10;varb,c;procedurep;beginc:=b+a;end;beginread(b);callp;write(c);end.SL:静态链DL