- 语言处理程序主要分为汇编程序、编译程序、解释程序。
- 解释器:翻译源程序时不生成独立的目标程序。
- 编译器:翻译时将源程序翻译成独立保存的目标程序。
- 解释程序和源程序要参与到程序的运作过程中。
- 机器上运行的是与源程序等价的目标程序。
- 源程序和编译程序都不参与目标程序(用户)的运行过程,而解释程序参与。
- 编译方式处理源程序时,进行优化。
- 汇编程序先将源程序中的伪指令翻译成机器代码。
- 汇编程序的功能是将汇编语言编写的源程序翻译成机器指令程序。
- 汇编语言是面向机器的符号化的程序设计语言。
- 汇编语言有3类语句:指令语句、伪指令语句、宏指令语句。
- A编译后出程序B,B反编译无法得到A。
- 编译方式:
- 词法分析
- 语法分析
- 语义分析
- 中间代码生成(可省略)(对可执行语句)
- 代码优化(可省略)(对可执行语句)
- 目标代码生成
- 解释方式(不生成目标程序,且以下三个均不可省略,顺序不可变换):
- 词法分析
- 语法分析
- 语义分析
- 编译方式下,在机器上运行的目标程序完全独立于源程序,不参与控制。
- 解释器:参与控制,程序执行的速度慢。
- 词法分析:
- 对声明语句生成符号表。
- 输入:源程序。输出:记号流。
- 作用:对构成程序的字符进行分析,判断是否符合程序语言的规定。
- 语法分析:
1.输入:记号流。输出:语法树。
2.作用:分析语法错误,对句子的结构进行判断。 - 语义分析
- 输入:语法树(分析树),类型分析和检查。
- 语法指导翻译:静态语义分析。
- 判断程序的语句的形式是否正确(括号,分号)。
- 不能发现程序中所有的语义错误。
- 可以发现静态语义错误。
- 不能发现动态语义错误。动态错误只有在运行时才能被发现。
- 中间代码生成
- 常见的:
(1). 后缀式
(2). 三地址码
(3). 三元式
(4). 四元式
(5). 树(图) - 共同特征是与具体的机器无关,即可以跨平台。
- 目标代码的生成阶段的工作,与具体的机器密切相关。
- 寄存器的分配工作储于目标代码生成阶段。
- 有利于进行与机器无关的优化处理和提高编译程序的可移植性。
- 常见的:
- 目标代码生成
- 不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中。
- 辅助语义的正确性检查和代码生成。
- 变量值:语义(类型)
- 变量是否定义:语法分析
- 编译正确的程序必然不包括语法错误。
- 词法分析:NFA/DNA的工具使用。
- 语法分析
- 上下文无关文法
(1).程序设计语言的绝大多数语法规则可以采用上下文无关的文法进行描述。 - 自顶向下语法分析方法
(1). 递归下降分析法,要求文法是LLR(1)
(2). 预测分析法(一种自顶向下的分析方法) - 自底向上语法分析方法
(1). 移进 - 归约分析法
(2). LR分析法
(3). 算符优先分析法
- 上下文无关文法