编译器:源程序-->目标程序,离线offline
解释器:处理程序的一种程序, 输出的是结果,在线online(把结果打印出来了)
编译原理集中体现了计算机科学的很多核心思想:算法,数据结构,软件工程
编译器本身就是很重要的研究领域。
编译器也可以把功能分为前端,后端。前端可以分为词法分析,语法分析。后端指令生成的部分,指令优化的部分。
汇编代码--->汇编器-->连接器
词法分析 主要作用
- 字符流--词法分析切分为->记号流
- C语言,字符流所在的集合是ASCII JAVA的话是UNICODE
- 记号流:编译器内部定义的数据结构。
手工实现方式 :纯手工写代码,相对来说比较复杂,容易出错,目前流行的实现方法是GCC 4.0之后 , LLVM 优点:有一个精确的控制
- 转移图,转移图算法
- 标识符的转移图,关键字是标识符的一部分。
- 关键字表,构造关键字构成的哈希表H。
自动生成器方式 : 快速原型、代码量较少 缺点:较难控制细节
语法分析器
记号流--语法分析器->抽象语法树--->语义分析器-->中间代码