现在,让我们看看如何分析句子“The man ate the carrot.”(那个男人吃了胡萝卜。)句法分析器的初始状态为:
分析栈 输入栈
(SO) (The man ate the carrot)
依据当前状态SO以及输入符号ART(词语“the”的词类),在图1的表中查找相关表项。你可以看到需要进行移进操作,并且转移到状态S1。因此,可以得到:
分析栈 输入栈
(S1 ART S0) (man ate the carrot)
依据当前状态S1以及输入符号N,查找相关表项。你可以看到需要进行移进操作,并且转移到状态S1。因此,可以得到:
分析栈 输入栈
(S1'N S1 ART S0) (ate the carrot)
依据当前状态S1',查找相关表项。需要采用规则2.2对它们进行归约,即分别从分析栈中移出S1',N,S1和ART,将NP压到输入栈中,最终结果为:
输入栈 分析栈
(SO) (NP ate the carrot)
依据当前状态SO以及输入符号NP,再次查询分析表。现在需要进行移进,并转移到状态S2,即:
分析栈 输入栈
(S2 NP S0) (ate the carrot)
接着,剩下的三个词语都需要移进并转移到新的状态。最终,句法分析器转入如下状态:
分析栈 输入栈
(S1'N S1 ART S3 V S2 NP S0) ()
在状态S1'中,需要采用规则2.2进行归约。因此,将N和ART出栈(这样,状态S1和状态S1’也同样出栈),从而生成下面的状态:
分析栈 输入栈
(S3 V S2 NP S0 ) (NP)
现在,又回到了状态S3。当前的输入为NP,转移到状态S3'后,采用规则2.4进行归约,可以生成如下状态:
分析栈 输入栈
(S2 NP S0) (VP)
最后,需要从状态S2转移到状态S2',并且采用规则2.1进行归约,得到:
分析栈 输入栈
(SO) (S)
从这个状态再转移到状态SO',最终会到达某个位置并接受这个句子。
对这个句子的句法分析已经完成了。在此期间,我们没有错误地尝而且没有构建任何一个不在最终分析结果中的成分。
责任编辑:admin