文档介绍:该【程序设计语言常用语法与翻译 】是由【wyj15108451】上传分享,文档一共【44】页,该文档可以免费在线阅读,需要了解更多关于【程序设计语言常用语法与翻译 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。信息学院软件工程教研室
编译原理
单击添加副标题
刘向菊
QQ: 8064793
信息学院软件工程教研室
信息学院软件工程教研室
第四章 程序设计语言常用的语法与翻译方法
单击添加副标题
单击此处添加文本具体内容,简明扼要地阐述你的观点
逆波兰表示法
逆波兰表示表达式 高级语言表示表达式
ab* a*b
ab*c+ a*b+c
abcd/+* a*(b+c/d)
ab*cd*+ a*b+c*d
3
2
1
4
5
信息学院软件工程教研室
高级语言表达式E的逆波兰表示法可这样定义:
若E是高级语言中的一个变量或常数,则E的逆波兰表示式仍是E。
若高级语言中的表达式为E1 op E2,其中,op是一个二元算符,E1、E2也是表达式,则逆波兰式表示为E1 'E2' op,其中,E1'是E1的逆波兰式,E2'是E2的逆波兰式。
若高级语言中的表达式为(E),则逆波兰表示式为去掉括号的E',E'为E的逆波兰表示式。
信息学院软件工程教研室
三地址代码是由下面一般形式的语句构成的序列。
x:=y op z
其中x、y、z是变量名或编译时产生的临时变量名;y、z还可以是常数;op代表某种操作符。这种中间语言的特点有两个。
(1)非常接近汇编语言形式,包括汇编语言中最基本的操作。
(2)每个语句中赋值号的右边只有一个操作符,使得句子意义最小且不可分。例如,源语言表达式x+y*z可被翻译成如下的句子序列:
T1:=y*z
T2:=x+T1
三地址代码
#2022
信息学院软件工程教研室
三地址代码的语句形式可分为两类:
一类是带有各种运算操作的赋值语句
第二类是转移语句
三地址码语句可看成是一种中间代码的抽象形成,在编译程序中,三地址代码的具体实现常以记录的形式表示,通常有3种表示方法:四元式、三元式、间接三元式
信息学院软件工程教研室
程序设计语言常用语法
表达式语法(算术)
赋值语句
if语句
循环语句
说明语句
函数的定义与调用
程序语句序列文法
信息学院软件工程教研室
表达式语法(算术)
根据算术表达式的定义,一般算术表达式记为E,其文法被定义为:
E→E op E (op 为双目操作符)
E→op E (op 为单目操作符)
E→D|id (D为数字,id为标识符号)
这是一个无法直接使用的二义性文法,必须使用前述两种消除二义性文法的策略将文法中的二义性表达加以限制或改写。
信息学院软件工程教研室
对这种表达式保留文法的二义性也有好处。不过在作语法分析时要规定算符间的优先关系和结合顺序,这样才能确定语句的最终意义。这就是常用于表达式语法分析的算符优先分析法。
信息学院软件工程教研室
无二义的表达式文法一般定义为:
无论采用哪一种文法形式,只要最终语句的意义是确定、不含糊的,并且是统一的,那么同一个语句所对应的抽象语法树就是相同的。
信息学院软件工程教研室