语义分析和中间代码的产生

紧接在词法分析和语法分析之后,编译程序要做的工作是进行静态语义检查和翻译。(图7.1)
静态语义检查
1、类型检查。
2、控制流检查。
3、一致性检查。
4、相关名字检查。
翻译(中间语言)的好处:
(1)便于进行与机器无关的代码优化;
(2)使编译程序改变目标机更容易;
(3)使编译程序的结构在逻辑上更为简单明确,以中间语言为界面,编译前端和后端的接口更清晰。

主要掌握几种常见的中间语言表达形式:
逆波兰表示(后缀式);
三地址代码(四元式、三元式、间接三元式);
图表示法(DAG 和抽象语法树);

后缀式表示法又称逆波兰表示法。
逆波兰式(Reverse Polish Notation)。逆波兰式最早于1920年由 Jan Lukasiewicz 发明,作为一种无需括号的数学表达式。
特点:把运算量(操作数)写在前面,把算符写在后面(后缀)。
例如:a + b 写为ab+;ab写为ab
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
华中科技大学 编译原理 面向过程的C语言的编译器设计 功能包括:词法分析和语法分析、语义分析中间代码生成的 源码 题目:c--语言编译器设计与实现(请为自己的编译器命名) 源语言定义:或采用教材中Decaf语言,或采用C语言(或C++语言或C#语言或JAVA语言)部分关键语法规则。源语言要求至少包含的语言成分如下: 数据类型至少包括char类型、int类型和float类型 基本运算至少包括算术运算、比较运算、自增自减运算和复合赋值运算 控制语句至少包括if语句和while语句 实验内容:完整可运行的自定义语言编译器 实验一:词法语法分析器的设计与实现:建议使用词法语法生成工具如:LEX/FLEX ,YACC/BISON等专业工具完成。 实验二:符号表的设计与属性计算:设计符号表数据结构和关键管理功能。动态展现符号表变化过程。无论语法分析使用工具还是自己设计,都必须对符号表进行设计和管理,属性计算可以语义子程序实现。 实验三:语义分析中间代码生成:生成抽象语法树,进行语义分析,实现类型检查和控制语句目标地址计算,生成中间代码中间代码的形式可以采用不同形式,但实验中要求定义自己的中间形式。 实验四:目标代码生成:在前三个实验的基础上实现目标代码生成。也可以使用工具如LLVM来生成目标代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值