- 1、本文档共71页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 简单的一遍编译器
第二章 简单的一遍翻译器 A Simple One Pass Compiler 本章主要内容 开发一个把中缀表达式转换为后缀表达式的翻译程序,展示基本的编译技术 主要描述编译器的前端 词法分析、语法分析和语义分析 通过本章对编译器构造的过程有所了解 2.1 概述 程序设计语言由语法(syntax)和语义(semantics)两个方面定义。 语法描述程序的正确形式 语义则描述程序的含义 语义的描述比语法的描述难得多 如何描述语法 Bakus-Naur范式(BNF) Syntax Graph 上下文无关文法 (CFG, Context Free Grammar ) Backus-Naur范式(BNF) Examples of BNF Syntax Graph 2.2 语法定义 语法描述程序设计语言的层次结构,如C语言的条件语句形如: if (expression) statement else statement 或者 if (expression) statement 这一规则表示为: if_stmt ? if (expr) stmt else stmt if_stmt ? if (expr) stmt 描述规则称为产生式 (production) 用上下文无关文法 (Context-free Grammar, CFG)来形式化这种描述。 2.2.1 上下文无关文法 上下文无关文法CFG是一个四元组 (Vt, Vn, S, P),其中: Vt 是一个非空有穷集合,称作终结符号集合Terminal Symbols Vn 是一个非空有穷集合,称作非终结符号集合Non-terminals ,且Vt?Vn = ?。 S ? Vn ,称作开始符号Start Symbol 。 P是一个非空有穷集合,称为产生式集合Production Rules ,每条产生式形为A??,其中A?Vn,??(Vt?Vn)*。 例2.1 简单的算术表达式 例2.1 简单的算术表达式 2.2.2 推导(derive) 例2.3 函数调用中的参数列表 2.2.3 分析树(Parse Tree) 分析树描述如何从文法的开始符号推导出它的语言中的一个语句。 如果非终结符A有产生式 A ?XYZ,则A的一棵分析树为: Parse Tree 分析树具有如下性质: Root is labeled with the Start Symbol Leaf node is a token or ? Interior node (Non-leaf) is a Non-Terminal If A ? x1x2…xn, Then A is an interior; x1x2…xn are children of A and may be non-terminals or tokens 一个文法生成的语言是它的某个分析树生成的串的集合。为给定的符号串找到一棵分析树的过程称为串的语法分析(parsing)。 推导过程可以用分析树( Parse Tree )表示 2.2.4 二义性 Ambiguity 如何判断文法具有二义性? 如果文法的某个句子存在两棵分析树, 则该句子是二义性的 。 如果一文法包含二义性的句子,则这个文法是二义性的。 句子abab有两个不同的最左推导,该句子是二义性的 ,所以此文法是二义性的。 2.2.5 Associativity of Operators 可以用括号来表明计算顺序,如 9-5+2 = (9-5)+2 如果对某个运算符op,x1,x2,x3为运算对象,且x1 op x2 op x3 表示 (x1 op x2) op x3,则称op是左结合的;如果x1 op x2 op x3 表示 x1 op (x2 op x3),则称op是右结合的。 Left vs. Right Question 如何增加*、/运算符? 2.2.6 Operator Precedence What does 9 + 5 * 2 mean? 2.2.6 Operator Precedence What does 9 + 5 * 2 mean? (9 + 2) * 5 9 + (5 * 2) 不同的运算符号有不同的优先级,如9+5*2 表示 9+(5*2),所以*的优先级比+高。 通过适当改写文法规则,可以描述不同的结合律和优先级: 基本因子: factor ? digit | ( expr ) 项由因子进行乘除运算构成: term ? term * factor | term / fa
您可能关注的文档
- 第九课_变幻多彩的地球c词语.ppt
- 第九课古诗二首(二).ppt
- 第九部分 自动变速器 AT (自动保存的).docx
- 第九节 加拿大.ppt
- 第二-五讲练习解答.ppt
- 第二三节热机的效率&能量的转化与守恒 人教版九年级物理第十四章 内能的利用.doc
- 第二、三、四章复习.pptx
- 第二三章 牛顿运动定律 动量守恒.ppt
- 第二册大学英语综合教程课后练习答案Unit1-Unit 4(word版).doc
- 第二册 Unit 8 Fourteen Steps_综合英语.ppt
- 吉安县公开招聘专职文明实践员笔试备考试题及答案解析.docx
- 2025重庆枫叶国际学校招聘教师笔试备考试题及答案解析.docx
- 游机队电玩自制联网教程-tplink.pdf
- 2025重庆新华出版集团招聘1人笔试模拟试题及答案解析.docx
- 2025宜宾高新丽雅城市产业发展有限公司公开招聘笔试模拟试题及答案解析.docx
- 2025云南保山市龙陵县勐糯镇人民政府招聘合同制专职消防员1人笔试模拟试题及答案解析.docx
- 11.1生活中常见的盐 九年级化学人教版下册.pptx
- 6.1法律保护下的婚姻 高二政治《法律与生活》课件(统编版选择性必修2)(新版).pptx
- 文昌市中小学教师校园招聘29人笔试模拟试题及答案解析.docx
- 10.1.5 常见的酸和碱(第5课时)课件-九年级化学人教版下册.pptx
文档评论(0)