分析方法简介:对于2 型文法,如何识别一个符号串是不是一个合法的句型或句子,其分析方法有两类,一类是自上而下分析方法,另一类是自下而上分析方法。
1,自上而下分析方法(不确定)
自上而下分析方法的基本思想是从文法的识别符号出发,看是否能推导出待检查的符号串,如果能推导出这个符号串,则表明此符号串是该文法的一个句型或句子,否则便不是。或者说,以文法的识别符号作为根结点,看其是否能构造一个语法树,而且此语法树所有叶子结点从左到右所构成的符号串恰好是待检查的符号串。如果能生成这样的语法树,则表明待检查的符号串是该文法的一个句型或句子,否则便不是。
PS:这种分析方法的不确定性表现在同一个产生式有多个不同的右部且右部首字符相同。例如,S→aAbc|aB。
for example:
设文法G[S]:
S→aAbc|aB
A→ba
B→beB|d
采用自上而下的分析方法,对符号串abed进行分析,识别它是不是该文法G的一个句子。
如图所示,在第一种情况中。符号串 ababc 与待查符号串 abed 的第二个符号相匹配,但与第三个符号不匹配,匹配失败。此时需要退回到非终结符号 A ,进行重新选择,但 A 只有一个产生式,无法重新选择,因此,需要再往前退回到非终结符S,重新进行选择S 另外的产生式,再做试探。这种往前回退,又称为回溯。在第二中情况中,由语法树的叶子结点从左到右所构成的符号串abed 与待检查的符号串 abed 完全匹配。说明待检查的符号串是该文法的一个句子。
PS:带回溯的自上而下的分析方法,又称为不确定的自上而下分析方法。这种方法显然花费时间多,效率低。如果对文法加以限制,就可以避免回溯。
2,确定的自上而下分析方法
确定的自上而下分析方法在自上而下分析方法的基础上对文法加以限制。确保文法的某一个非终结符有几条产生式,而且每条产生式右部首符号都是终结符号时,应保证它们是互不相同的终结符。
for example:
设文法G[S]:
S→aBc|bCd
B→eB|f
B→dC|c
采用确定的自上而下的分析方法,对符号串aefc进行分析,识别它是不是该文法G的一个句子。
PS:这种情况很简单,根据要识别符号串的当前符号依次选择某个确定的非终结符的产生式进行推导(根据待检查符号串的当前符号以及各产生式右部首字符而进行的,因此是确定的)。
3,自下而上分析方法
自下而上分析方法的基本思想是从待检查的符号串出发,看最终是否能够归约(推导的逆过程)到文法的识别符号。如果能归约到文法的识别符号,则表明此待检查的符号串是该文法的一个句型或句子,否则便不是。
4,句型的短语,直接短语,句柄
语法树与短语的关系:
1,每个句型或句子都对应有一棵语法树;
2,每棵语法树的叶子结点从左到右,从上到下构成一个句型或句子;
3,语法树中每棵子树的叶子结点从左到右,从上到下构成一个短语;
4,每棵子树(子树高度为1)的直接叶子结点从左到右,从上到下构成一个直接短语。直接短语肯定是短语,但短语不一定是直接短语;
5,最左简单子树的直接叶子结点从左到右,从上到下构成一个句柄;
PS:
短语:语法树子树的叶子结点组成的符号串。
简单(直接)短语:语法树简单子树(子树高度为1)的叶子结点组成的符号串。
句柄:语法树的最左简单子树的叶子结点组成的符号串(即一个句型语法树的最左直接短语称为该句型的句柄)。
一个句型的短语,直接短语可以有多个,但句柄只能有一个。
句型本身是该句型关于开始符号的短语。
注意:短语、直接短语和句柄都是针对某一句型来说的,都是指句型中的哪些符号串能构成短语,直接短语和句柄,脱离句型来谈短语、直接短语和句柄是无意义的。
for example:
文法G[E]:E→E+T|E-T|T
T→T*F|T/F|F
F→(E)|i
画出句型E+F*(E+i)的语法树,并找出它的短语,直接短语和句柄。
PS:根据语法树可知:
句型E+F*(E+i)的短语有:
E+F*(E+i) 相对非终结符 E 的短语。
F 相对非终结符 T 的短语。
F*(E+i) 相对非终结符 T 的短语。
(E+i) 相对非终结符 F 的短语。
E+i 相对非终结符 E 的短语。
i 相对非终结符 T,F 的短语。
PS:接下来就开始自动机的学习了,未完待续。。。(^_^)
本文出自 “珞辰的博客” 博客,谢绝转载!
原文地址:http://luochen2015.blog.51cto.com/9772274/1864547