上下文无关文的形式化描述:
一个上下文无关文法是一个四元组,(Vt, Vn,S, P)其中,
Vt是一个非空有限集,它的每个元素称为终结符号;
Vn是一个非空有限集,它的每一个元素称为非终结符号。其中Vn与Vt的交集是空集。
S是开始符号
p是产生式的集合,产生式的形式是P->a.其中P属于Vn,a属于Vt并Vn。
最左推导和最右推导
所谓最左推导就是对推导的每一步中都对最左非终结符进行替换。
所谓最右推导就是对推导的每一步中都对最右非终结符进行替换。
语法分析树与二义性
语法分析树的意义:
一颗语法分析树表示了一个句型种种可能的(但是未必是全部可能)的推导过程,包括最左和最右推导。那么一个句型是否只有一棵语法分析树和一个唯一最左最右推导呢,其实不然。可能有的句型存在多个语法分析树,这样的句型叫做二义性文法。已经可以证明的是,二义性文法是不可判定的。
对于描述程序语言的文法的限制:
1)文法中不能包括任何这样形式的产生式:P->P
2)每个非终结符都必须有用处:对于任何P都不存在永不终结的回路。
我们以后讨论的文法都必须满足这样的两个条件,称为简化了的文法。
形式语言鸟瞰
形式语言是Chomsky于1956年建立的,这种理论对计算机科学有着深刻的影响,特别是在编译原理和计算复杂性理论上。Chomsky把文法分成四种类型,0型文法,1型文法,2型和3型。这几类文法的区别在于对产生式有不同的限制。
0型文法:0型文法是这样一种文法,如果它的每个产生式,a->b是中至少包含一个终结符。如果对0型文法分别施加以下的第i条限制,则我们就得到i 型文法:
1)G的任何产生式a->b均满足|a|<=|b|(其中|a|和|b|分别为a和b的长度);
2) G的任何产生式为a->b A属于Vn,b属于Vn和Vt的并集
3)G的任何产生式为A->aB或A->a,其中a属于Vt、A、B属于Vn
1型文法属于上下文相关文法。这种文法意味着,对非终结符进行替换是必须考虑上下文,并且不允许使用空串替换非终止符。
如果非终结符替换的时候可以不考虑上下文,这就是上下文无关文法,也就是2型文法。
3型文法也叫做右线性文法。3型文法还有另外一种形式,叫做左线性文法。由于3型文法等价于正规式,所以3型文法也可以叫做正规文法。