编译原理(清华大学版)第一章
基本概念
词法分析
-
是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(token)。
Token包括:关键字、标识符、界符等
语法分析
-
把Token串转换成体现语法规则的抽象树(AST)
-
是在词法分析基础上将单词序列构造成各类语法短语(比如表达式、语句、程序等),通过语法分析确定整个输入串是否构成一个语法上正确的程序。
语义分析
-
审查源程序有无语义错误
-
找到变量的作用域
-
识别执行的运算方式
-
进行类型的检查
是审查源程序有无语义错误,为代码生成阶段收集类型信息
中间代码生成
-
将源程序变成一种易于翻译成目标代码的内部表示形式(四元式)
代码优化
-
是对前阶段生成的中间代码进行变换或改造,使生成的目标代码更为高效。
目标代码生成
-
把中间代码变换成特定机器上的目标代码(绝对指令代码或可重定位的指令代码或汇编指令代码)
第一章习题
-
什么是编译程序?为什么需要编译程序?
-
编译原理课程的主要内容是什么?
-
编译过程典型地被划分成哪几个阶段?各阶段的主要任务是什么?
-
编译前端和后端各有什么特点?各自包含编译过程的哪几个部分?
-
贯穿编译过程的两个工作是什么?各自的主要任务是什么?
答案:
-
- 从功能上看,一个编译程序就是一个语言翻译程序,是一个能把一种语言书写的程序翻译成另一种语言的等价程序
- 一个编译程序的重要性体现在它是的多数计算机用户不必考虑与机器有关的繁琐细节,使得程序员和程序设计专家独立于机器。 -
- 介绍程序设计语言编译程序构造的一般原理、基本设计方法和主要实现技术。
-
- 词法分析程序:输入源程序,拼单词,检查单词和分析单词,输出单词的机内表达形式。
- 语法分析程序:在词法分析的基础上,将单词组成各类语法短语并分析能否构成正确程序。
- 语义分析程序:对语法分析所形成的各类短语分析其含义,进行语义审查。
- 中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。
- 中间代码优化程序:为了产生高质量的目标代码,对中间代码进行加工优化处理。
- 表格管理程序:负责建立,填写,查找等一系列表格管理工作。
- 出错处理程序:处理和校正源程序中存在的语法、语义、词法错误。 -
- 1. 前端的工作主要依赖于源语言而与目标机无关。前端包括词法分析、语法分析、语义分析和中间代码生成,也包含某些优化工作。
- 2. 后端指的是那些依赖于目标机而一般不依赖于源语言,至于中间代码有关的那些阶段的工作,即目标代码生成,以及相关出错处理和符号表操作 -
- 错误的诊察处理和符号表管理
- 错误的诊查处理: 编译过程中发现源程序有错误,编译程序应报告错误的性质和错误发生的地点,并将错误所造成的影响限制在尽可能小的范围内,使得源程序的其余部分能继续被编译下去。
- 符号表管理:编译过程中源程序的各种信息被保留在种种不同的表格里,编译各阶段的工作都涉及构造、查找或更新有关的表格。