我有一个 ANTLR3 简单语法解析器,它接受短文本行并将它们转换为 Java 对象。接下来,我有一个很大的文本行列表。其中一些(少于1%)可以转换,因为它们符合语法。
我需要将它们全部传递给解析器,以便了解哪些是可转换的,并创建 Java 对象的集合。操作非常耗时。在发送到 ANTLR3 之前通过正则表达式传递它们会更有效。
我可以自己创建这样的正则表达式,但从 ANTLR3 解析器动态获取它会更好。可以吗?
最佳答案
一般来说,只有正则语言才能有描述它们的正则表达式。 (大多数 RE 引擎支持也匹配一些非常规语言的功能(例如通过反向引用),但仍然不是所有上下文无关甚至通用形式语言。)
我并不是真正的antlr专家,但我认为它的语法可以匹配不可重新匹配的语言。
所以,即使你的问题的理论可解性并没有真正给出,它也取决于语法。
可能是这样
- 您的语法实际上是常规语法,或者
- 存在一种常规语言,它是语法语言的超集 - 因此 RE 可以过滤掉大多数不匹配的行,而某些行只会被语法/解析器过滤掉。
在不查看语法的情况下,很可能没有确定的方法来确定。
此外,正则表达式不一定比解析器更快。
关于java - 是否可以将ANTLR3语法转换为正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5317290/