欢迎来到天天文库
浏览记录
ID:8852943
大小:38.50 KB
页数:2页
时间:2018-04-09
《编译原理实验:pl0语言及其实现》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、课程实践项目一、PL/0语言的扩展1、课程实践要完成下列要求(1)给PL/0语言增加像C语言那样的形式为/*……*/的注释。(2)给PL/0语言增加带else子句的条件语句和exit语句。(3)给PL/0语言增加输入输出语句。(4)给PL/0语言增加带参数的过程。(5)给PL/0语言增加布尔类型。(6)给PL/0语言增加数组类型。(7)给PL/0语言增加函数类型。(8)给PL/0语言增加实数类型。(9)分离解释器和编译器为两个独立的程序。2、扩展后的PL/0语言的语法Program®Block.Bl
2、ock®[ConstDecl][TypeDecl][VarDecl][FuncDecl]StmtConstDecl®constConstDef{,ConstDef};ConstDef®ident=numberTypeDecl®typeTypeDef;{TypeDef;}TypeDef®ident=TypeExpTypeExp®integer
3、real
4、Boolean
5、array‘[’number..number‘]’ofTypeExpVarDecl®varVarDecl;{VarDecl;}VarD
6、ec®ident{,ident}:TypeType®integer
7、real
8、Boolean
9、identFuncDecl®FuncDec{FuncDec}FuncDec®procedureident[(ForParal)];Block;
10、functionident[(ForParal)]:Type;Block;ForParal®ident:Type{;ident:Type}Stmt®IdentRef:=Exp
11、ifExpthenStmt
12、ifExpthenStmtelseStmt
13、beginStmt
14、{;Stmt}end
15、whileExpdoStmt
16、exit
17、e
18、callident[(ActParal)]
19、write(Exp[,Exp])
20、read(IdentRef[,IdentRef])IdentRef®ident[‘[’Exp‘]’{‘[’Exp‘]’}]ActParal®Exp{,Exp}Exp®oddSimpExp
21、SimpExpRelOpSimpExpRelOp®=
22、<>
23、<
24、>
25、<=
26、>=SimpExp®[+
27、-]Term{+Term
28、-Term
29、orTerm}Term®Facto
30、r{*Factor
31、/Factor
32、divFactor
33、modFactor
34、andFactor}Factor®IdentRef
35、number
36、(Exp)
37、notFactor
38、ident[(ActParal)]
39、true
40、false有关该扩展的说明如下:(1)描述语言的部分符号的解释符号®、
41、、[、]、{和}是描述语言的符号,其中方括号[…2]中的部分可以出现0次或1次,花括号{…}中的部分可以出现任意次数,包括0次。被描述语言若使用上述这些符号,则需要用单引号,例如在数组类型的定义和下标变量的引用中
42、。(2)词法部分·形式为/*……*/的注释也是词法单元之间的分隔符。·标识符ident是字母开头的字母数字串。·number是无符号数,若是实数,则采用小数点前后都有非空数字串这一种形式。·新增保留字:type、array、of、integer、real、Boolean、function、else、write、read、exit、or、and、not、div、mod、true、false。·div:整数除,mod:取模,/:实数除(3)静态检查和动态检查·若exit语句没有处于任何while语句中,
43、则是一个错误。·读写语句的变量引用和表达式只能是整型或实型。·数组类型的类型相容性检查是按名字等价而不是结构等价。·数组类型不能作为过程和函数的参数类型,也不能作为函数的结果类型。·除上述几点之外的静态检查都是大家应该知道的,不在此叙述。·运行时检查下标表达式是否越界,越界则报告错误,停止程序的运行。(4)语句的语义只对特殊部分加以说明。·exit语句作为while语句的非正常出口语句。若处于多层while语句中,则它只作为最内层while语句的非正常出口。·读语句接受从键盘输入的数据,数据之间用空
44、格分隔。读语句具有忽略当前输入行剩余字符,下一个读语句接受的数据另起一行的功能。·写语句输出的数据显示在屏幕上,数据之间用空格分隔。写语句具有结束当前输出行,下次输出另起一行的功能。·增加了写语句后,原来sto指令的输出功能取消,以免输出数据过多,不宜发现所关心的数据。·程序员定义的函数和过程的参数都是值调用参数,函数的结果类型不能是数组类型。·布尔类型的表达式按短路方式计算。·函数中没有return语句,在函数中把函数名当作局部变量,通过对函数名赋值来把函数值返回。
此文档下载收益归作者所有