java - 是否可以将ANTLR3语法转换为正则表达式?

标签 java antlr antlr3

我有一个 ANTLR3 简单语法解析器,它接受短文本行并将它们转换为 Java 对象。接下来,我有一个很大的文本行列表。其中一些(少于1%)可以转换,因为它们符合语法。

我需要将它们全部传递给解析器,以便了解哪些是可转换的,并创建 Java 对象的集合。操作非常耗时。在发送到 ANTLR3 之前通过正则表达式传递它们会更有效。

我可以自己创建这样的正则表达式,但从 ANTLR3 解析器动态获取它会更好。可以吗?

最佳答案

一般来说,只有正则语言才能有描述它们的正则表达式。 (大多数 RE 引擎支持也匹配一些非常规语言的功能(例如通过反向引用),但仍然不是所有上下文无关甚至通用形式语言。)

我并不是真正的antlr专家,但我认为它的语法可以匹配不可重新匹配的语言。

所以,即使你的问题的理论可解性并没有真正给出,它也取决于语法。

可能是这样

  • 您的语法实际上是常规语法,或者
  • 存在一种常规语言,它是语法语言的超集 - 因此 RE 可以过滤掉大多数不匹配的行,而某些行只会被语法/解析器过滤掉。

在不查看语法的情况下,很可能没有确定的方法来确定。

此外,正则表达式不一定比解析器更快。

关于java - 是否可以将ANTLR3语法转换为正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5317290/

相关文章:

antlr3 - 使用 Antlr-3.5-complete.jar 生成 OracleSQL 语法时出现大量模板错误

java - 更严格的 String.format 不会忽略额外的参数?

compiler-construction - 如何使用 ANTLR 修改 CommonTokenStream 中的 token 文本?

java - 在 Java 中如何检查我是否已到达 String 的末尾?

antlr - 是否可以在没有 Eclipse 的情况下使用 Xtext?

parsing - ANTLR 4 中的重叠 token

python - Antlr4 在 RaspberryPi 上运行缓慢

c++ - 如何用非类函数指针调用类成员函数?

java - 创建没有 XML 文件的relativelayout

java - Fancytree Selenium 点击事件