编译原理
目录
- 引论
- 1、编译程序
- 编译过程
- 2、解释程序
- 3、文法
- 4、句型的分析
- (1)、自顶向下的分析方法——推导
- (2)、自底向上的分析方法——规约
- 5、有穷自动机
- (1)确定的有穷自动机(DFA)
- (2)不确定的有穷自动机(NFA)
引论
1、编译程序
编译程序是现代计算机基本组成部分之一,而且多数计算机系统都配有不止一种高级语言的编译程序,对有些高级语言设置配置了几个不同性能的编译程序。
从功能上看,一个编译程序就是一个语言翻译程序。语言翻译程序把一种语言(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价程序。
编译程序的基本任务是将源语言程序翻译成等价的目标语言程序。
编译过程
- 词法分析:从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。
- 语法分析:在词法分析的基础上将单词序列分解成各类语法短语。语法分析所依据的是语言的语法规则,即描述程序结构的规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。(词法分析和语法分析本质上都是对源程序的结构进行分析)
- 语义分析:审查源程序有无语义错误,为代码生成阶段收集类型信息。
- 中间代码生成:是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的设计原则为两点:一是容易生成;而是容易将它翻译成目标代码。
- 代码优化:对前一阶段产生的中间代码进行变化或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间。
- 目标代码生成:把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。
2、解释程序
它不需要在运行前先把源程序转换成目标代码,就可以实现在某台机器上运行程序并生产结果。解释程序接受某个语言的程序并立即运行这个源程序。它的工作模式是一个个的获取、分析并执行源程序语句,一旦第一个语句分析结束,源程序便开始运行并且生成结果。
3、文法
乔姆斯基把文法分成4种类型,即0型、1型、2型和3型。文法G定义为四元组(Vn,Vt,P,S)。
- Vn:非终结符的集合,用大写字母表示
- Vt:终结符的集合,用小写字母表示
- P:为规则(α→β)的集合,即产生式的集合
- S:称作识别符或开始符,它是一个非终结符
- 0型文法:也成短语文法。设G=(Vn,Vt,P,S)为一个文法,如果它的产生式α→β 是这样一种结构:α∈(Vn ∪ Vt)* 且至少含有一个非终结符,而 β∈(Vn ∪ Vt)* ,则是一个0型文法。它的能力相当于图灵机。(对0型文法产生式的形式作某些限制,以给出1型、2型和3型文法的定义)
- 1型文法:设G=(Vn,Vt,P,S)为一个文法,若P中的每一个产生式α→β 均满足 |β|≥|α|,仅仅S→ɛ除外,则文法G是1型或上下文有关的。它的能力相当于限行界限自动机。
- 2型文法:设G=(Vn,Vt,P,S)为一个文法,若P中的每一个产生式α→β 满足:α是一个非终结符,β∈(Vn ∪ Vt)* ,则此文法称为2型的或上下文无法的。它的能力相当于下推自动机。
- 3型文法:设G=(Vn,Vt,P,S)为一个文法,若P中的每一个产生式的形式都是 A→aB(右线性,A→Ba称为左线性) 或 A→a,其中A和B都是非终结符,a∈Vt*,则G是3型文法或正规文法。它的能力相当于有限状态自动机。
4、句型的分析
句型的分析就是识别一个符号串是否为某文法的句型,识别它是不是某文法的句子。句型分析是一个识别输入符号串是否为语法上正确的程序的过程。分析算法分为两大类,即自顶向下和自底向上。
(1)、自顶向下的分析方法——推导
是从文法的开始符号出发,反复使用各种产生式,寻找“匹配”于输入符号串的推导。它需要考虑的问题是:如何选择哪一个推导式来进行推导?
(2)、自底向上的分析方法——规约
是冲输入符号串开始,逐步进行“规约”,直至规约到文法的开始符号。它需要考虑:如何识别可规约的串?
5、有穷自动机
(1)确定的有穷自动机(DFA)
- 初态唯一
- f是一个单值映射
- 任意状态射出弧上的标记都不相同
- 任意状态至多只有n条射出弧
- 若DNA能识别ɛ,则初态也是终态
(2)不确定的有穷自动机(NFA)
- 初态不唯一
- f是一个多值映射函数
- 同一状态射出弧上的标记可相同
- 任一状态可以有多于n条射出弧
- 允许初态也是终态
还没有评论,来说两句吧...