1:概述和历史
程序设计语言(源)à编译器à机器语言(目标)
编译器:程序设计语言翻译器
FORTRAN编译器,nroff和troff等
2:编译器可以做什么
分类一:按照试图生成的目标代码类型
(1)
(2)
(3)
分类二:生成的目标机器代码的格式
(1)
(2)
(3)
3:解释器:
执行程序而不明确地进行翻译。
程序和任何其他数据一样,执行过程中控制点在解释器中而不在用户程序中
允许:
(1)
(2)
(3)
(4)
开销:
(1)
(2)
3:编译器结构
(1)
(2)
(3)
(4)
(5)
(6)
4:程序设计语言的语法和语义
完整的程序设计语言包括了语法(结构)和语义(意义)。
语法通常可以分为:上下文无关,上下文相关两种
(1)上下文无关的序列直接作为语法问题处理(只需要检验符号序列是否符合定义即可,不依赖与符号的意义)。
(2)上下文相关的序列作为语义问题处理(不仅仅检验符号序列是否符合定义,还要检查符号的意义是否符合规定)。
语义组件被典型地分为两种:静态语义,运行时语义
(1)静态语义:定义了上下文相关的约束,程序被接受之前,需要强制这些约束。都不能用CFG来表达的标识符声明,操作符和操作数的类型相容,适当数量的参数调用过程。
(2)运行时语义:规定程序做什么,计算什么,通常被及其非形式化地规定?
总结:程序设计语言事实上是由编译器选择接受的内容以及选择如何翻译语言结构的方式来定义。
5:编译器设计与程序设计语言设计
程序设计语言的设计影响并常常支配编译器的设计。
易于编译的程序设计语言有诸多优点:
(1)
(2)
(3)
(4)
(5)
(6)
一个允许编译的程序设计语言必须具备什么属性?须考虑一下问题:
(1)
(2)
(3)
6:编译器分类
多种变体:
(1)
(2)
(3)
7:影响编译器设计的因素(高效+可靠)
(1)计算机指令集面向汇编级程序设计,高级程序设计的代码难以实现
(2)调整指令集,甚至直接提供硬件支持
(3)精简指令集,减小编译器任务