资源描述:
《第二章PL0编译程序的实现ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第2章PL/0编译程序的实现本章要点掌握语言的形式化描述:语法描述图与巴科斯范式EBNF。以PL/0为例学习编译程序实现的基本步骤和相关技术,熟悉并理解编译程序的基本原理和概念。对于一段给定的程序,给出其形式化描述术语元语言(metalanguage):用以描述另一种语言的语法或语义的形式化的语言。2.1PL/0语言概述PL/0语言:PASCAL语言的子集数据类型只有整型。标识符的有效长度是10,以字母开始的字母数字串。数值最多为14位。过程无参数,可嵌套定义(最多三层),可递归调用。变量的作用域同PASCAL,常量为全局的,无标号。PL/0非形式化描述语句类型:赋值语句,read,w
2、rite,call,if...then...,while...do...,复合语句:begin...end,说明语句:const...,var...,procedure…13个保留字:if,then,while,do,read,write,call,begin,end,const,var,procedure,odd2.1.1PL/0语言的语法描述图程序语法描述图程序分程序•内的文字表示非终结符内的文字或符号表示终结符分程序语法描述图constidentnumber=,var;ident;,语句分程序(过程)语法描述图procedureident;;分程序语句语法描述图ident:=表达
3、式identcallendbegin语句语句;if条件语句then语句语法描述图while表达式identdowrite语句,条件read()(),空语句条件语法描述图odd>=表达式表达式<=<#=>表达式表达式语法描述图项项+-+-项语法描述图因子因子*/因子语法描述图identnumber()表达式2.1.2PL/0语言文法的EBNF表示BNF(BACKUS-NAURFORM)是根据美国的JohnW.Backus与丹麦的PeterNaur来命名的,它从语法上描述程序设计语言的元语言(metalanguage)。采用BNF就可说明哪些符号序列是对于某给定语言在语法上有效的程序。EB
4、NF—扩展的巴科斯范式(ExtendedBACKUS-NAURFORM)PL/0语言文法的EBNF表示表示的符号说明:<>语法单位,语法成分为非终结符::=语法定义,左部由右部定义
5、‘或’,多个右部定义{}花括号内的语法成分可重复多次[]方括号内的语法成分为任选项()圆括号内的成分为优先选项EBNF巴科斯范式<程序>::=<分程序>.<分程序>::=[<常量说明部分>][<变量说明部分>][<过程说明部分>]<语句><常量说明部分>::=CONST<常量定义>{,<常量定义>}<常量定义>::=<标识符>=<无符号整数><无符号整数>::=<整数>{<整数>}EBNF巴科斯范式<变量说
6、明部分>::=VAR<标识符>{,<标识符>}<标识符>::=<字母>{<字母>
7、<数字>}<过程说明部分>::=<过程首部><分程序>{,<过程说明部分>}<过程首部>::=PROCEDURE<标识符>;EBNF巴科斯范式<语句>::=<赋值语句>
8、<条件语句>
9、<当型循环语句>
10、<过程调用语句>
11、<读语句>
12、<写语句>
13、<复合语句>
14、<空语句><赋值语句>::=<标识符>:=<表达式><复合语句>::=BEGIN<语句>{;<语句>}END<条件>::=ODD<表达式>
15、<表达式><关系运算符><表达式>EBNF巴科斯范式<表达式>::=[+
16、-]<项>{<加法运算符><项>}<项
17、>::=<因子>{<无符号整数><因子>}<因子>::=<标识符><乘法运算符>
18、‘(’<表达式>‘)’<加法运算符>::=+
19、-<乘法运算符>::=*
20、/<关系运算符>::==
21、#
22、<
23、<=
24、>
25、>=EBNF巴科斯范式<条件语句>::=IF<条件>THEN<语句><过程调用语句>::=CALL<标识符><当型循环语句>::=WHILE<条件>DO<语句><读语句>::=READ(<标识符>{,<标识符>})<写语句>::=WRITE(<表达式>{,<表达式>})<字母>::=a
26、b
27、c
28、……
29、X
30、Y
31、Z<数字>::=0
32、1
33、2
34、3
35、4
36、5
37、6
38、7
39、8
40、9PL/0编译程序pcode解释
41、程序PL/0源程序pcode代码注:此处的pcode代码专指PL/0的目标码,注意与传统pcode的区别2.2PL/0编译程序的结构PL/0编译程序PL/0源程序表格管理程序词法分析程序代码生成程序出错处理程序语法分析程序目标程序PL/0程序示例CONSTA=10;(*常量说明部分*)VARB,C;(*变量说明部分*)PROCEDUREP;VARD;PROCEDUREQ;VARX;BEGINREAD(X);D:=X;WHILEX#0DOC