文法和语言总结与梳理
1.梳理第二章的内容,写一篇理解与总结
答:文法的形式定义
1.文法大体上可以分为三种类型:通用的,自顶向下的和自顶向上的。
2.文法:一种用于描述程序设计语言语法的表示方法——“上下文无关文法”,简称“文法”。
3.文法有四个元素组成:文法G可以抽象成四元组的形式:G=(VN,VT,P,S)其中VN表示非终结符集,VT表示终结符集,P表示产生式集,S表示开始符号。
4.文法G描述的语言用L(G)表示L(G)={w|w∈VT*且S=*>w},其中S是文法G的开始符号,我们可以说w是G的一个句型。因此一个终结符号串w在G生成的语言L(G)中,当且仅当w是G的一个句子。可以由文法生成的语言被称为上下文无关语言。(1
5.(1)最左推导:总是选择每个句型的最左非终结符号。逆过程为最右规约。
(2)最右推导:总是选择每个句型的最右非终结符号,也称为规范推导。逆过程为最左规约。
6.文法的二义性:如果一个文法可以为某个句子生成多棵语法分析树,那么它就是二义性的。换句话说,二义性文法就是对同一个句子有多个最左推导或多个最右推导的文法。造成二义性的原因是:文法中没有体现出结合率和优先级。
7.文法的分类:
(1)0型文法:无限制文法、短语文法,α->β,α中至少含一个非终结符。
(2)1型文法:上下文有关文法,α->β满足|α|<=|β|,对于产生式α1Aα2->α1βα2,用β替换A时,只能在上下文为α1和α2时才能进行。这里的|β|表示的是β的长度。同理|α|表示的是α的长度。注意:虽然要求|β|>=|α|,但有一特例:α→ε也满足1型文法。
(3)2型文法:上下文无关文法,A->β,其中左边必须有且仅有一个非终结符,当用β替换A时,与A的上下文环境无关。如Ab->Bab虽然符合1型文法要求,但不符合2型文法要求,因为其α=Ab,而Ab不是一个非终结符。
(4)3型文法:也称为正则文法。它应该满足以下条件:
①左边必须只有一个字符,且必须是非终结符。
②右边最多只能有两个字符,且当只有两个字符时必须是一个为终结符而另一个为非终极符;当右边只有一个字符时,此字符必须为终结符。
③对于3型文法中的所有产生式,其右边有两个字符的产生式,这些产生式右边两个字符中终结符和非终结符的相对位置一定要固定,也就是说如果一个产生式右边的两个字符的排列是:终结符+非终结符,那么所有产生式右边只要有两个字符的,都必须前面是终结符而后面是非终结符。反之亦然,要么,就全是:非终结符+终结符。
2. 尝试写出PL/0 语言的文法。(或者你认为比较好的语言规则)
答:
<语句> -> <赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<读语句>|<写语句>|<复合语句>|<空>
<赋值语句> -> <标识符>:=<表达式>
<复合语句> -> begin<语句>{ ;<语句>}<end>
<加减运符> -> +|-
<乘除运算符> -> *|/
<关系运算符> -> =|#|<|<=|>|>=
<条件语句> -> if<条件>then<语句>
<过程调用语句> -> call<标识符>
<字母> -> a|b|c…x|y|z
<数字> -> 0|1|2…7|8|9

浙公网安备 33010602011771号