我有一个ANTLR3简单语法分析器,它接受短行文本并将它们转换为Java对象。接下来,我有一个很大的文本行列表。其中一些(少于1%)可以转换,因为它们符合语法。
我需要通过解析器传递所有这些,以便了解哪些是可转换的,并创建Java对象的集合。操作非常耗时。在发送到ANTLR3之前,通过正则表达式传递它们会更有效。
我自己可以创建这样的正则表达式,但从ANTLR3解析器动态获取它会好得多。有可能吗?
答案 0 :(得分:4)
通常,只有常规语言可以使用描述它们的正则表达式。 (大多数RE引擎支持与某些非常规语言匹配的功能(例如通过反向引用),但仍然不是所有无上下文甚至是一般的正式语言。)
我不是一个真正的专家,但我认为它的语法可以匹配不可匹配的语言。
所以,即使你的问题的理论上的可解性也没有给出,这取决于语法。
可能是那个
如果没有看到你的语法,很可能没有办法确定。
此外,正则表达式不一定比解析器快。
答案 1 :(得分:1)
具体来说,ANTLR可以解析LL(*)的context free grammars子类。
要判断您的语言是否为常规,请查看您是否可以应用pumping lemma for regular languages。