2025-09-08 编译系统原理第一节课笔记
编译器编译的步骤:
- 分析部分:将源程序分为基本组成部分
- 词法分析:将源代码分割成单词。其中单词指的是在源代码中一类性质相同符号的集合,如标识符、关键字、运算符等。
- 语法分析:根据词法分析的结果,构建语法树,形成单词间的层次关系。并进行语法检查。
语法树分为抽象语法树和具体语法树。抽象语法数只包含单词,以操作为节点参数为子节点,而具体语法树则包含抽象出的语法概念。其中根节点通常表示程序的主体,如变量等。通常以操作顺序最后的运算符为根节点,同时采用后序遍历方法。
- 语义分析:检查语法树的语义,检测是否符合运算符的要求,确保其正确性。
- 综合部分:从中间表示形式构建目标程序
- 中间代码生成:将语法树转换成中间代码,以便于后续的代码生成与不同语言之间的编译器的移植。
- 优化代码:对中间代码进行优化,以提高代码的执行效率。
- 代码生成:将中间代码转换成目标汇编码。
源程序分析
词法分析
忽略空格、注释、换行符等符号,将字符分割成单词。
语法分析
将词法分析产生的单词组合为语法短语,并生成语法分析树。
语法结构的递归定义
- 表达式: 数和标识符(即变量名、函数名)是表达式,表达式运算也是表达式。
- 语句: 标识符=表达式是语句,while(表达式)do语句是语句,if(表达式)then语句是语句。
- 文法: 文法是一组规则,用来描述单词的相互关系与结构。
词法分析和语法分析的区分
- 语法分析需要递归
- 词法分析识别单个单词;语法分析识别表达式、语句、括号匹配等。
- 语法分析需要层次化结构
语义分析
- 确保语法结构无歧义
- 检查不含语义
- 为代码生成收集信息
- 类型检查