我正在寻找用Java实现的CFG解析器。问题是我正在尝试解析一种自然语言。我需要所有可能的解析树(含糊不清),而不仅仅是其中之一。我已经研究了很多NLP解析器,比如斯坦福解析器。但是他们大多需要统计数据(我没有的树库),而且要将它们改编成新语言是相当困难和记录不完整的。 我找到了一些解析器生成器,如ANTRL或JFlex,但我不确定它们是否可以处理歧义。那么哪个解析器生成器或java库最适合我? 提前致谢
答案 0 :(得分:3)
答案 1 :(得分:1)
答案 2 :(得分:1)
查看相关讨论here。在我在该讨论中的最后一条评论中,我解释说,通过克隆到目前为止派生的解析树,你可以使任何解析器生成器生成所有解析树。
如果你的语法是:
G -> ...
你会增强如下:
G' -> G {semantic:deal-with-complete-parse-tree} <NOT-VALID-TOKEN>.
解析引擎最终会在所有派生中失败,但您的程序将具有:
当我在教学时,ANTLR和JavaCC都做得很好。我更倾向于ANTLR因为它的BNF词法分析,而且它的历史,愿景,许可和许可都不那么复杂。