《编译程序基本原理》
- 编译过程
- 词法分析: 针对单词;输入是字符;读的是字符流;
- 语法分析: 针对语句;读的是记号流,即词法分析产生的一个个单词
- 语义分析(针对语句含义)
a. 静态语义错误(编译阶段)
b. 动态语义错误(运行阶段)
- 中间代码和目标代码(可跨平台)
- 代码优化
- 目标代码生成(不可跨平台)
- 中间代码
- 常见:后缀式(逆波兰式)、三元式(三地址码)、四元式、树
- 后缀表达式的简单求法:从左到右开始先把表达式加上括号,再依次把运算符加到本层次的括号后面
- 给中缀表达式求后缀:
《文法定义》
- 文法(编译阶段)
- “ + ”:正则闭包,不含空串
- “ * ”:闭包,含空串
- E ——> T+T ——> T:只考虑符号,只看逻辑运算
- E + T * - F:2 + 3 * - 4 <—— 2 + -3 * 4
《正规式》
- 带“ * ”包含空串,无“ * ” 不包含空串
- 闭包包含空串,正则闭包不包含空串
《有限自动机》
- 确定的有限自动机(DFA):五元组
- 不确定的有限自动机(NFA)
- 五元组:
- 一个环(开始),两个环(结束)
- DFA和NFA的转换
1. 看状态图上的转换条件是否都有
2. 先分析状态图的头尾,再分析中间
- 转换条件:S1 —0—> S4,S2 —空串—> S3
- 头尾:0 0