编译原理及编译程序构造
chap2 文法和语言的概念和表示
知识点
-
语法树中带有尖括号的结点是语法成分,在形式语言中称为非终结符号;不带尖括号的是单词成分,终结符号;
-
字母表中的元素称为符号;由字母表的符号组成的任何有穷序列称为符号串;
-
符号串的运算:相等、长度、联结;集合的乘积 AB={xy|x∈A,y∈B} ;符号串的幂运算x0=ε;
- 集合的幂运算
- A0={ε}, A1=A, A2=AA;
- 集合A的闭包A*和正闭包A+;
- A+=A1∪A2∪…∪An∪… , A*=A0∪A+
- 文法 G=(Vn, Vt, P, Z)
- Vn, 非终结符号集
- Vt, 终结符号集,文法字汇表 V=Vn∪Vt
- P, 产生式或规则的集合
- Z, 开始符号(识别符号),Z∈Vn
- 集合的幂运算
-
BNF表示法 U::=x,U::=y缩写为U::=x|y
-
直接推导和间接推导
-
句型和句子(由终结符号组成);句子是句型;
-
语言:文法G[Z]产生的所有句子的集合L(G[Z])
-
规范推导/最右推导:符号串中有2个以上非终结符时,先推右边;
- 可由规范推导推出的句型是规范句型;
- 由文法可以从结构上唯一确定语言,但由语言不能确定唯一的文法;
- 等价文法:能产生相同的语言的文法;
-
递归规则:在规则的右部具有和左部相同的非终结符号的规则;
- 直接递归:文法中至少包含一条递归规则;
- 间接递归
- 左递归文法,不能自顶向下分析;
-
短语:句型中某个非终结符能推出的符号串;
- 给定文法G[Z], w=xuy∈V+是句型,若Z推导出xUy,且
- U间接推导u,则u是句型w相对于U的短语;(U∈Vn, u∈V+, x,y∈V*)
- U直接推导u,则u是句型w相对于U的简单短语;
- 短语和简单短语都针对于某个句型、非终结符号;
- 句柄:任一句型中最左边的简单短语叫句柄;一个句型可能有多个短语、简单短语,只有一个句柄;
- 给定文法G[Z], w=xuy∈V+是句型,若Z推导出xUy,且
-
语法树
- 句型w的语法树中,子树的叶节点连接得到的串u是相对于子树根节点U的句型w 的短语;若此子树高度为1,则叶节点连接的串u是相对于根节点U的句型w的简单短语;若在所有高度为1的子树中,此子树的最左叶节点在原符号串中的下标最小,则叶节点连接成的符号串u是句型w的句柄;
- 子树与短语(练习2.4-5):句型中某些符号按照从左到右的顺序组成某棵子树的末端终点,由这些末端结点组成的符号串是相对于子树根的短语;
- 规约:由树构造推导;最右推导与最左规约互为逆过程;
-
文法二义性
- 文法定义的某个句子有两棵不同的语法树(两个不同的最右/左推导 / 最左规约),则文法具有二义性;
- 文法二义性不可判定,解决二义性问题:根据条件修改编译算法、根据条件修改文法;
-
符号串分析
- 自顶向下分析
- 自底向上分析:每次直接归约总是归约当前句型的句柄
-
对文法的实用限制
- 避免有害规则:U::=U
- 避免多余规则:一是推导中始终用不到的规则,二是一旦用了此规则就无法推出任何终结符号串;
- 压缩文法:文法G中的每个非终结符号都不是无用符号,文法G为压缩过的或简化过的
-
扩充的BNF表示和语法图
- BNF表示法 U::=x,U::=y缩写为U::=x|y
- BNF元符号:< ,>, |, ::=
- 扩充的BNF元符号:< ,>, |, ::=,{,},[,],(,)
- {}表示重复0到∞次,[]表示可选,()提取因子
- 语法图
- BNF表示法 U::=x,U::=y缩写为U::=x|y
-
文法和语言分类
- 形式语言:用文法和自动机描述的没有语义的语言
- 乔姆斯基把所有文法定义为四元组G=(Vn,Vt,P,Z)
- 文法和语言分类:0型、1型、2型、3型
- 0型:短语结构文法,左部符号序列至少一个非终结符右部可能为空,一个短语产生另一个短语;P: u::=v, u∈V+,v∈V*;L0可为图灵机接受;
- 1型:上下文敏感,只有在x……y这样的上下文中才能把U改写为u;P:xUy::=xuy, U∈Vn,x、y、u∈V*;L1可为线性界限自动机接受;
- 2型:上下文无关文法;P:U::=u,U∈Vn,u∈V*;与BNF表示等价(对1型文法限制x、y为空符号串得到2型文法);L2为下推自动机接受;
- 3型:正则文法;左线性P:U::=T或U::=wT,U、w∈Vn,T∈Vt,(非终结符+终结符);L3可为有穷自动机接受;
- L0包含L1包含L2包含L3,0型文法可以产生L0-L3,(但2型文法只能产生L2不能产生L1,待商榷);
- 大部分程序设计语言的文法接近2型文法,算法语言中大部分与词法相关的文法属于3型文法;
例题1:语法树、短语、简单短语、句柄
解答:
语法树: