- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程序设计语言常用语法与翻译
第四章 程序设计语言常用的 语法与翻译方法 最简单的情况E是一个布尔变量a,那么有: 真出口 假出口 信息学院软件工程教研室 * 编译原理 刘向菊 QQ: 8064793 Tel: 信息学院软件工程教研室 4.1 逆波兰表示法 逆波兰表示表达式 高级语言表示表达式 ab* a*b ab*c+ a*b+c abcd/+* a*(b+c/d) ab*cd*+ a*b+c*d 高级语言表达式E的逆波兰表示法可这样定义: (1)若E是高级语言中的一个变量或常数,则E的逆波兰表示式仍是E。 (2)若高级语言中的表达式为E1 op E2,其中,op是一个二元算符,E1、E2也是表达式,则逆波兰式表示为E1 E2 op,其中,E1是E1的逆波兰式,E2是E2的逆波兰式。 (3)若高级语言中的表达式为(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 4.2 三地址代码 三地址代码的语句形式可分为两类: 一类是带有各种运算操作的赋值语句 第二类是转移语句 三地址码语句可看成是一种中间代码的抽象形成,在编译程序中,三地址代码的具体实现常以记录的形式表示,通常有3种表示方法:四元式、三元式、间接三元式 4.3 程序设计语言常用语法 4.3.1 表达式语法(算术) 4.3.2 赋值语句 4.3.3 if语句 4.3.4 循环语句 4.3.5 说明语句 4.3.6 函数的定义与调用 4.3.7 程序语句序列文法 4.3.1 表达式语法(算术) 根据算术表达式的定义,一般算术表达式记为E,其文法被定义为: E→E op E (op 为双目操作符) E→op E (op 为单目操作符) E→D|id (D为数字,id为标识符号) 这是一个无法直接使用的二义性文法,必须使用前述两种消除二义性文法的策略将文法中的二义性表达加以限制或改写。 对这种表达式保留文法的二义性也有好处。不过在作语法分析时要规定算符间的优先关系和结合顺序,这样才能确定语句的最终意义。这就是常用于表达式语法分析的算符优先分析法。 无二义的表达式文法一般定义为: 无论采用哪一种文法形式,只要最终语句的意义是确定、不含糊的,并且是统一的,那么同一个语句所对应的抽象语法树就是相同的。 4.3.2 赋值语句 赋值语句的文法最简单,定义为: 其中,是一个名字,它表示各种类型的变量,包括下标变量(数组)。“=”是赋值号,E是表达式,赋值语句的语义是把赋值号右边表达式的值放到赋值号左边名字所指的地址中去。 对赋值语句文法定义的句子而言,相应的抽象语法树如图所示。 4.3.3 if语句 if语句是控制语句的一种,它的文法被定义为: 这个语法有两个候选式,这两个候选式的前半部分是一样的,即:。也就是说,在一个符号串之后可能紧跟一个或跟其他的符号串。由于可选的影响,这个文法有二义性的,即所谓“悬挂问题”。 考虑以下符号串: 其中,符号E1、E2、S1、S2都是由终结符组成的符号串。 这个串有两个分析树 该语法树把看作与其最近的同属一层 该语法树把看作与整句之首的同属一层 改写的文法如下: 这个文法用非终结符M单独定义可嵌套的if…else语句。它是无二义的,只是有些累赘,也不太容易理解。实际上,并不是所有的语句文法一定会存在悬挂,有些语言的设计就避免了这个问题。如果所有的语句都有结尾,或其他类似符号结尾,就不存在这个问题了。 语句又称分支语句。在C中,它的语义是根据表达式的值决定是否执行语句S或执行两个语句S中的某一个。仔细分析一下语句的符号串,真正有可执行意义的符号只有E和S两个非终结符,其他终结符只是标记符号串的结构形式。因此,在建立抽象语法树的时候,我们可以摆脱那些没有意义的符号。 上图所示是语句抽象语法树的结构。 这是一棵有
您可能关注的文档
最近下载
- 卫生部修订病历书写基本规范(全文).pdf VIP
- (推荐!)GB 45673-2025《危险化学品企业安全生产标准化通用规范》之“5.1安全领导力”审核检查单(2025A0).docx VIP
- 《合金凝固理论》课程教学大纲.pdf VIP
- 2025年行政执法人员执法资格考试必考题库与答案.docx
- 22J403-1楼梯栏杆栏板.pptx VIP
- 《创伤性休克及急救》课件.ppt VIP
- KISSsoft 培训资料.ppt VIP
- 2024义务教育小学科学课程标准(2024版)解读(面向核心素养的科学教育).pptx VIP
- 设立招标代理服务公司组建方案.pptx VIP
- 新民主主义革命PPT通用课件.pptx VIP
文档评论(0)