首页 > 代码库 > 形式语言之语言和语法树

形式语言之语言和语法树

1,句型,句子和语言:

                从文法的开始符号出发,利用其中的产生式逐步推导出待分析的符号串,如果能推导出这个符号串则表明此符号串是该文法的一个句型或句子。否则便不是。句型与句子的区别在于符号串是否全部由终结符构成,如果经过多步推导出的符号串全部由终结符构成就是句子,否则便是句型(句子一定是句型,句型不一定是句子)。文法的所有的句子的集合就是该文法所对应的语言。

2,描述形式语言的两种方法

                1,枚举(描述有穷的语言集合)

                2,文法(描述无穷的语言集合)

3,文法和语言的关系:文法是用来生成(定义)语言的。从文法的开始符号出发,反复使用其中的产生式对非终结符进行替换和展开推导出语言中的各种句子。

                a,给定一个文法,就能从结构上唯一的确定其语言。

                b,给定一种语言,能确定其文法,但不唯一。

                c,若文法G1和文法G2所产生的语言相同,即L(G1) = L(G2) ,则称文法G1和文法G2是等价的。

4,推导的类型??(最左推导或最右推导)

                a,直接推导:对于产生式集合P中的所有产生式,每个产生式的右部是它左部的直接推导。

                b,一步推导(直接推导):记为 v=>u ,称符号串u 是符号串v 的一步推导。

                c,0步或多步推导:记为 v=>*u ,称符号串u 是符号串v 的0 步或多步推导。

                d,1步或多步推导:记为 v=>+u,称符号串u 是符号串v 的1 步或多步推导。

                e,最左推导:在一个推导的过程中,如果每一步直接推导所被替换的总是最左的非终结符号,那么这种推导称为最左推导。

                f,最右推导:在一个推导的过程中,如果每一步直接推导所被替换的总是最右的非终结符号,那么这种推导称为最右推导。最右推导又称为规范推导。用规范推导得到的句型称为规范句型。


for example:

5,设文法G[E] = ({ E,T,F },{ i },{ E→E+T|T,T→T*F|F,F→(E)|i },E)。试写出 E+(E+T)*i 符号串的最右推导和最左推导。

                最右推导:E => E+T

                                    => E+T*F

                                    => E+T*i

                                    => E+F*i

                                    => E+(E)*i

                                    => E+(E+T)*i

                最左推导:E => E+T

                                    => E+T

                                    => E+T*F

                                    => E+F*F

                                    => E+(E)*F

                                    => E+(E+T)*F

                                    => E+(E+T)*i

6,递归规则和递归文法

                1,递归规则:是指那些在规则(产生式)右部含有与规则左部相同符号的规则。例如,A→aAb 右部含有与规则左部相同符号A,那么就是递归规则。如果这个相同的符号出现在右部的最左端,则为左递归规则。如A→Aa。如果这个相同的符号出现在右部的最右端,则为右递归规则。如A→aA。

                2,递归文法:若文法中至少包含一条递归规则,则称文法是直接递归的。若文法中不含递归规则,但有推导过程A=>+ aAb,所以该文法为间接递归文法。递归文法能使我们用有穷的文法刻画无穷的语言。

PS:含有递归规则的文法一定是递归文法,而递归文法不一定含有递归规则。


7,根据文法确定其所对应的语言

for example:求1 型文法G[S] = ({ S,X,Y,Z },{ x,y,z },{ S→xSYZ|xYZ,xY→xy,yY→yy,yZ→yz,zY→Yz,zZ→zz },S)所确定的语言。

解释:由题可知1 型文法G[S]是一个递归文法,所以我们可以分为两种情况进行讨论,一种是不进行递归,另一种是进行递归。再将进行递归情况分解为一次递归,两次递归,三次递归考虑。最后得出规律。

第一种情况:

                非递归:S => xYZ

                                => xyZ

                                => xyz

                递归一次:S => xSYZ

                                    => xxYZYZ

                                    => xxyZYZ

                                    => xxyzYZ

                                    => xxyYzZ

                                    => xxyyzZ

                                    => xxyyzz

                递归二次:S => xSYZ

                                    => xxSYZYZ

                                    => xxxYZYZYZ

                                    => xxxyZYZYZ

                                    => xxxyzYZYZ

                                    => xxxyYzZYZ

                                    => xxxyyzZYZ

                                    => xxxyyzzYZ

                                    => xxxyyzYzZ

                                    => xxxyyYzzZ

                                    => xxxyyyzzZ

                                    => xxxyyyzzz

最后得出规律:文法G[S]确定的语言是 L(G[S]) = { x^ny^nz^n | n>=1 }。

8,语法树的生成

                在自然语言中,可通过树形表示直观地分析句子的结构;在形式语言中,则是通过语法树直观地分析文法的句型结构。设文法G[S] = (Vn,Vt,P,S),对于文法G[E] 的任意一个句型都存在一个相应的语法树。

                1,语法树中每个结点都有一个标记,该标记是 Vn ∪ Vt ∪ { ε } 中的一个符号。结点的名字就是该符号。

                2,语法树的根结点标记是文法的识别符号 S。

                3,如果语法树的一个结点至少有一个叶子结点,则该结点的标记一定是一个非终结符。

                4,语法树中一个结点和它的子结点分别对应于文法中一个规则(产生式)的左部和右部。

                5,语法树中的子树就是某个结点和它向下射出的部分。

                6,叶子/末端结点:没有向下射出的边的结点(没有叶子结点)称为叶子/末端结点。在相对于句型的语法树中,叶子/末端结点可能是非终结符号。


for example:

9,设文法G[E] = ({ E,T,F },{ i },{ E→E+T|T,T→T*F|F,F→(E)|i },E)。依据文法G[E] 的产生式生成句型E+(E+T)*i 相应的语法树。

技术分享

PS:未完待续。。。(^_^)



本文出自 “珞辰的博客” 博客,谢绝转载!

形式语言之语言和语法树