朱娜婓编译原理学习笔记
说明
-
笔记大部分内容来自参考资料[1], 看了B站上中科大华保健老师的编译原理课视频(参考资料[2]),补充完善了DFA的代码表示、Hopcroft 算法、文法重写、LL(1)算法、LR算法等内容
-
有许多知识是结合了自己的理解进行整理,所以可能会有错误之处
-
再往后因为时间问题就有点烂尾了...
-
文章末尾有北京工业大学2019年软件学院编译原理的考题回忆及朱娜斐老师划分的考点(recoded by @杰哥)
Keyword
- 中科大华宝健编译原理学习笔记
- 北京工业大学朱娜婓编译原理学习笔记
- 2019年北京工业大学软件学院编译原理期末考试试卷回忆版
什么是编译器
什么是编译器
编译器是一个程序,核心功能是把源代码翻译成目标代码
编译器的工作解释
源代码-->编译器的静态计算-->目标程序-->计算机的动态计算-->计算结果
静态计算
是指编译器只根据程序文本静态地分析(如做报错分析、优化分析),而不是真的拿 CPU 去执行
计算机
可能是一个 x86 的物理器(如对应 C 语言),也可能是 JVM java 虚拟机(如对应 java)。
编译器和解释器的比较
解释器也是一类处理程序的程序
区别在于:
-
编译器:输入源代码,输出一个可执行程序,但不去执行。
(存放在磁盘上等待被加载到内存中执行)
-
解释器:输入源代码,直接输出执行结果。
其实 JVM 就是一个解释器,而不是一个单纯的编译器。输入 java 字节码 bytecode ,然后直接输出执行结果,而不是输出汇编代码。
编译器简史
第一个编译器是Fortran语言的编译器
该编译器给计算机科学的发展产生了巨大的影响:
- 理论上:算法、数据结构、形式语言与自动机
- 实践上:软件工程、体系结构等
- 编译器架构
编译器内部结构
简述
编译器具有非常模块化的高层结构
编译器可以看做多个阶段构成的“流水线” 结构
编译器规模庞大,拆分模块容易实现和维护
一种没有优化的编译器结构
相关推荐