- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
上机安排.ppt
记号是一个二元组: 记号名,属性值 记号名是同类词法单元公用的名称 属性值是一个词法单元有别于同类词法单元的特征值 语义分析阶段使用语法树和符号表中的信息, 依据语言定义检测源程序的语义一致性,以保 证程序各部分能有意义地结合在一起。 中间表示需要具备的性质:易于产生,易于翻译成目标程序 三地址代码(常用的中间表示) 三地址代码由三地址指令序列组成,每条指令最多有三个操作数 课堂练习 score=exam*0.7+homework*0.3+reward (score, exam, homework为float类型) (reward整型) * * * * * * 上机 安排 C语言赋值语句: position = initial + rate ? 60 1.4 编译器的工作原理与基本组成 MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1 符 号 表 position initial rate . . . . . . . . . 1 2 3 词法分析器 ?id, 1? ?=? ?id, 2? ?+? ?id, 3? ??? ?60? C语言赋值语句: position = initial + rate ? 60 ? 记号流 ? 字符流 1.4 编译器的工作原理与基本组成 词法分析:扫描构成源程序的字符流,按词法规则把它们组成记号流 1.4 编译器的工作原理与基本组成 词法分析器 ?id, 1? ?=? ?id, 2? ?+? ?id, 3? ??? ?60? position = initial + rate ? 60 1.4 编译器的工作原理与基本组成 标识符position形成的记号是id, 1 id是标识符的总称 1代表position在符号表中的条目 符号表的条目用来存放标示符的各种属性 符 号 表 position initial rate . . . . . . . . . 1 2 3 赋值号=形成的记号是assign 该记号只有一个实例,不需要属性值来区分实例 为了直观,记作= 标识符initial形成的记号是id,2 加号形成的记号是+ 标识符rate形成的记号是id,3 乘号*形成的记号是* 60形成的记号是60 语法分析器 语法树 ?id, 1? ?=? ?id, 2? ?+? ?id, 3? ??? ?60? 记号流 1.4 编译器的工作原理与基本组成 语法分析按照语言的语法规则检测词法分析输出的记号流是否符合语法规则,并用树的形式描述该记号流的语法结构 符 号 表 position initial rate . . . . . . . . . 1 2 3 语法分析器 ?id, 1? ?=? ?id, 2? ?+? ?id, 3? ??? ?60? ?=? ?+? ??? ?60? ?id, 1? ?id, 2? ?id, 3? ? 语法树 ? 记号流 1.4 编译器的工作原理与基本组成 1.4 编译器的工作原理与基本组成 语义分析的一个重要内容是类型检查 例如:当实数作为数组下标时,编译器报错 运算类型隐式转换 例如:算数运算作用于一个整数和一个实数时, 编译器会把其中的整数转换为实数 符 号 表 position initial rate . . . . . . . . . 1 2 3 语义分析器 ?=? ?+? ??? ?60? ?id, 1? ?id, 2? ?id, 3? ?=? ?+? ??? inttofloat ?id, 1? ?id, 2? ?id, 3? ?60? ? 语法树 ? 语法树 1.4 编译器的工作原理与基本组成 1.4 编译器的工作原理与基本组成 中间代码生成:将源程序表示为更低级的显式中间表示 符 号 表 position initial rate . . . . . . . . . 1 2 3 中间代码生成器 t1 = inttofloat(60) t2 = id3 ? t1 t3 = id2 + t2 id1 = t3 ?=? ?+? ??? inttofloat ?id, 1? ?id, 2? ?id, 3? ?60? ? 三地址中间代码 ? 语法树 1.4 编译器的工作原理与基本组成 符 号 表 position initial rate . . . . . . . . . 1 2 3 代码优化器 t1 = inttofloat(60) t2 = id3 ? t1 t3 = id2 + t2 id1 = t3 t1 = id3 * 60.0 id1 = id2 + t1 ? 三地址中间代码
文档评论(0)