- 签证留学 |
- 笔译 |
- 口译
- 求职 |
- 日/韩语 |
- 德语
在语义分析器的简单管道流的结构中,将一个完全的句法剖析结果作为输入传给语义分析器。这样做的动机源于组合方法在处理之前就需要句法剖析这一事实。然而,语义分析与句法处理同时进行也是可能的。可能的原因在于,在我们的组合框架中只要给出所有成分部件就可以生成一个成分的意义表示。
把语义分析结合到Earley剖析中是比较容易理解的。而且与把合一运算结合到算法中的处理方法是相同的。对原来的算法需要做三项修改:
1. 将一个新的域引入语法规则,以包含它们的语义附着。
2. 将一个新的域引入线图中的状态,以容纳成分的意义表示。
3. 改变ENQUEUE函数,以便于当一个完全状态进入线图时,在状态的语义场中能够计算和存储语义。
在图1中给出了为生成意义表示而对ENQUEUE函数所做的修改。当一个完全状态通过ENQUEUE并且这个状态能成功地合并它的合一约束时,ENQUEUE调用APPLY-SEMANTICS来为这个状态计算并存储意义表示。注意,在语义分析之前进行特征合一处理的重要性。这样做确保语义分析处理只是基于有效的剖析树,并且确保能给出语义分析需要的特征。
图1 修改ENQUEUE函数以便于处理语义。如果状态是完全的并且合一成功,则ENQUEUE调用APPLY-SEMANTICS来计算并存储完全状态的意义表示
这种结合方法相对于管道流方法的根本优点在于这一事实:APPLY-SEMANTICS能以与合一失败类似的方式失败。如果发现一个语义的非良构形式,在生成意义表示时,则这个相关的状态就能够被阻塞,以防止进入线图。借助这个方法,在句法处理时就实现了语义考虑。
遗憾的是,这同时也是把语义结合到剖析中所带来的根本缺点中的一个,也就是大量的精力将耗费在孤立(orphan)成分的语义分析上,而这最终对一个成功的剖析并没有多少贡献。早期实现语义所带来的益处是否大于引入外部语义处理所带来的耗费,这个问题只能根据每个具体的实例来回答(对于不同的实例,答案很可能不同)。
责任编辑:admin