文法的形式定义
1.处理文法的语法分析器大体上可以分为三种类型:通用的,自顶向下的和自顶向上的。
2.文法:一种用于描述程序设计语言语法的表示方法——“上下文无关文法”,简称“文法”。
3.一个上下文无关文法(文法)有四个元素组成:
文法G可以抽象成四元组的形式:G=(VN,VT,P,S)
其中VN表示非终结符集,VT表示终结符集,P表示产生式集,S表示开始符号。
(1)一个终结符号集合,也称为词法单元。是组成串的基本符号。
(2)一个非终结符号集合,也称为语法变量。是表示串的集合的语法变量。
(3)一个开始符号。这个符号表示的串集合就是这个方法生成的语言。
(4)一个产生式集合。描述了将终结符号和非终结符号组合成串的方法。有三个元素组成:
①一个被称为产生式头或左部的非终结符号这个产生式定义了这个头所代表的串集合的一部分。
②符号→。
③一个由零个或多个终结符号或非终结符号组成的右部或产生式体。右部中的成分描述了左部的非终结符号所对应的串的某种构造方法。
4.文法G描述的语言用L(G)表示L(G)={w|w∈VT*且S=*>w}
其中S是文法G的开始符号,我们可以说w是G的一个句型。因此一个终结符号串w在G生成的语言L(G)中,当且仅当w是G的一个句子。可以由文法生成的语言被称为上下文无关语言。
(1)句型:一个句型可能既包含终结符号又包含非终结符号,也可能是空串。
(2)句子:是一个不包含非终结符号的句型。
(3)语言:一个文法生成的语言是它所有句子的集合。
(5)文法等价:如果两个文法生成相同语言,这两个文法就被称为是等价的。
5.(1)最左推导:总是选择每个句型的最左非终结符号。逆过程为最右规约。
(2)最右推导:总是选择每个句型的最右非终结符号,也称为规范推导。逆过程为最左规约。
例:
文法:
S--->AB
A--->a|t
B---->+CD
C--->a
D---->a
最右推导:
S--->AB---->A+CD--->A+Ca---->A+aa----->a+aa
最左推导:
S---->AB----->aB--->a+CD--->a+aD----->a+aa
6.上下文无关文法及其语法树:
7.文法的二义性:如果一个文法可以为某个句子生成多棵语法分析树,那么它就是二义性的。换句话说,二义性文法就是对同一个句子有多个最左推导或多个最右推导的文法。
造成二义性的原因是:文法中没有体现出结合率和优先级。
8.文法的分类:
(1)0型文法:无限制文法、短语文法,α->β,α中至少含一个非终结符。
(2)1型文法(CSG):上下文有关文法,α->β满足|α|<=|β|,对于产生式α1Aα2->α1βα2,用β替换A时,只能在上下文为α1和α2时才能进行。这里的|β|表示的是β的长度。同理|α|表示的是α的长度。
注意:虽然要求|β|>=|α|,但有一特例:α→ε也满足1型文法。
(3)2型文法(CFG):上下文无关文法,A->β,其中左边必须有且仅有一个非终结符,当用β替换A时,与A的上下文环境无关。
如Ab->Bab虽然符合1型文法要求,但不符合2型文法要求,因为其α=Ab,而Ab不是一个非终结符。
(4)3型文法(RG):也称为正则文法。它应该满足以下条件①左边必须只有一个字符,且必须是非终结符。②右边最多只能有两个字符,且当只有两个字符时必须是一个为终结符而另一个为非终极符;当右边只有一个字符时,此字符必须为终结符。③对于3型文法中的所有产生式,其右边有两个字符的产生式,这些产生式右边两个字符中终结符和非终结符的相对位置一定要固定,也就是说如果一个产生式右边的两个字符的排列是:终结符+非终结符,那么所有产生式右边只要有两个字符的,都必须前面是终结符而后面是非终结符。反之亦然,要么,就全是:非终结符+终结符。
可以理解为每个产生式形为A->aB或A->a。它是在2型文法的基础上满足:A→α|αB(右线性)或A→α|Bα(左线性)。
它们分别被四种自动机识别:
(1)图灵机
(2)线性界线自动机
(3)下推自动机
(4)有穷自动机