1、编译和解释
编译型和解释型最大的不同,就是编译型会生成目标代码;
编译型编译的过程如下:
源程序 -> 词法分析 -> 语法分析 -> 语义分析 -> 中间代码生成 -> 代码优化 -> 目标代码生成 -> 目标程序
- 词法分析:利用正规式、有限状态机,来检查是否存在非法字符,关键字或标识符拼写错误等;
- 语法分析:检查语法结构是否正确,比如 if else 不匹配,缺分号等;
- 语义分析:静态和动态语义分析,这里主要是指静态语义分析;静态语义分析,检查是否显式除0等;动态语义分析,运行时中出现的问题,检查死循环、隐式除0等;
- 中间代码生成和代码优化这两步,可以没有;
2、文法
描述语言语法结构的规则成为文法;
一个形式文法是一个有序四元组G=(V, T, S, P),其中:
- S:起始符,是语言的开始符号;
- T:终结符,是语言的组成部分,是最终结果;
- V:非终结符,不是语言组成部分,不是最终结果,可理解为占位符;
- P:产生式,用终结符替代非终结符的规则;
文法的分类:
类型 | 别称 | 说明 | 对应自动机 |
0型 | 短语文法 | 递归可枚举 | 图灵机 |
1型 | 上下文有关文法 | 线性界限自动机 | |
2型 | 上下文无关文法 | 非确定的下推自动机 | |
3型 | 正规文法 | 有限自动机 |
3、有限自动机和正规式
有限自动机是一种识别装置的抽象概念,他能有效的识别正规集;
分为两类:确定的有限自动机(DFA)和不确定的有限自动机(NFA),两类都是一个五元组,任何一个NFA都可以转换到DFA;
正规式:描述程序语言单词的表达式;
4、数据类型和程序控制结构
常量和变量、全局量和局部量、数据类型;
数据类型
- 基本类型:整型、字符型、布尔型;
- 特殊类型:空类型;
- 用户定义类型:枚举类型;
- 构造类型:数组、结构、联合;
- 指针类型:type*
- 抽象数据类型:类类型(C++)
控制结构
- 顺序结构
- 选择结构
- 循环结构
5、表达式
- 前缀表达式:+ab
- 中缀表达式:a+b
- 后缀表达式:ab+,左->右->根
求(a-b)*(c+2)的后缀表达式 => 外层加括号 ((a-b)*(c+2)) => 符号移到括号外 => ((ab)-(c2)+)* => ab-c2+*
6、函数与传值和传址
传址就是传地址/引用;
总的来说,这一章里的文法、有限状态机、正规式没看明白,但看有限状态机的图做题还是可以的;