翻译程序:是指这样的程序能够把某一种语言程序(源语言程序)转化成另一种语言程序(目标语言),而后者与前者在逻辑上是等价的
编译程序:源语言是诸如Java、C、Ada、Pascal这样的“高级语言”,目标语言是诸如汇编语言的“低级语言”,这样的一个翻译程序就称为编译程序
编译程序的工作一般可以划分为5个阶段:
词法分析、语法分许、语义分析及中间代码的生成、优化、目标代码生成
编译程序各个阶段之间的关系:
下一阶段将上一阶段的结果进行处理
程序语言主要由语法、语义两方面定义
词法分析、语法分许、语义分析及中间代码的生成、优化、目标代码生成
编译程序各个阶段之间的关系:
下一阶段将上一阶段的结果进行处理
程序语言主要由语法、语义两方面定义
高级程序语言是用来描述算法和计算机实现的双重目的
语法分析树(语法树)是对句子的描述
文法描述语言的语法规则
上下文无关文法G包括四个组成部分:
终极符号,非终结符号(大写符号),开始符号,产生式
箭头“→”读作“定义为”,直竖“|”读作“或”,它们都是源语言符号
终极符号,非终结符号(大写符号),开始符号,产生式
箭头“→”读作“定义为”,直竖“|”读作“或”,它们都是源语言符号
句型:由终结符号和非终结符号组成的文法
句子:仅含终极符号的句型
语言:由文法产生的所有句子组成
最左推导是指:对于任何a ==> b,都对a的最左非终结符号进行迭代
如果一个文法存在一个句子对应两棵不同的语法树,则称这个文法是二义的
二义文法:
1、最左端是一个非终结符号
2、左边的个数≤右边的个数
确定有限自动机(DFA),非确定有限自动机(NFA)
1、最左端是一个非终结符号
2、左边的个数≤右边的个数
确定有限自动机(DFA),非确定有限自动机(NFA)
一个LEX源程序主要包括两部分
1、正规定义式
2、识别规则
闭包:由集合中的元素组成的无数多个串(其实跟循环差不多)
1、正规定义式
2、识别规则
闭包:由集合中的元素组成的无数多个串(其实跟循环差不多)
消除左递归的方法:
eg:P ==> Pα|β
---------
P ==> βP'
P' ==> αP’|e
短语:语法树中任意子树节点所组成符号串
eg:P ==> Pα|β
---------
P ==> βP'
P' ==> αP’|e
短语:语法树中任意子树节点所组成符号串
直接短语:只有两代的端末
句柄:由最左推导的出来的直接短语
规范规约:针对α的最左规约,即就是最右推导的逆过程
规范规约,即就是由上一步推导出下一步的过程、式子;而句柄,指的是该式子、公式推导符号的推导结果
“移进-规约”过程由4个列组成
步骤、符号串、输入串、动作
算符优先文法的判定:
只要优先关系表中没有多重入口
算符优先的分析过程 等价于 移进-归约
步骤、符号串、输入串、动作
算符优先文法的判定:
只要优先关系表中没有多重入口
算符优先的分析过程 等价于 移进-归约
附注语法树,带注释的语法树