【问题标题】:Antlr 4 parsing large c file takes foreverAntlr 4解析大型c文件需要永远
【发布时间】:2013-10-19 03:55:14
【问题描述】:

我有一个大型 c 代码文件 (>9000 LoC) 并尝试使用以下语法对其进行解析:

https://github.com/antlr/grammars-v4/blob/master/c/C.g4

我等了一个多小时才中止。该机器是具有 4GB 内存的 Core 2 Duo L9400。最大 java vm-heap-size 设置为 2GB。 它不会产生任何解析错误,但它根本没有完成。

在做了一些研究之后,我将预测模式设置为 SLL,这会产生一个 在几秒钟内“输入没有可行的替代方案”。

接下来,我将预测模式设置为 LL_EXACT_AMBIG_DETECTION 并将 DiagnosticErrorListener 附加到解析器。这会产生很多“歧义报告”,主要是 关于声明/声明说明符。我认为这会迫使解析器非常频繁地回溯,这可能是解析时间长的原因?

除了尝试重写语法之外,我还能做些什么来提高性能?

任何帮助表示赞赏;)

【问题讨论】:

    标签: c performance parsing antlr antlr4


    【解决方案1】:

    首先,重要的是要注意 ANTLR 4 在解析过程中从不回溯。

    您所指的语法不是 SLL,它会阻止您以最快的模式使用 ANTLR 4。然而,在或实验期间,我们能够识别出我们更改为生成语法 SLL 的单个规则。您可以通过 antlr-interest 邮件列表获得更改后的语法。我现在正在参加音乐会,所以我无法访问它。

    【讨论】:

    • 我有点不好意思承认,但我找不到 antlr 4 兴趣邮件列表。您能否指出我正确的方向,或者甚至是语法? antlr.org/support.html 仅指 antlr 3 邮件列表的存档。
    【解决方案2】:

    是的。我们将其从规范转换为仅更改一个规则即可证明您可以做到。我们会尽快优化那个。

    【讨论】:

      猜你喜欢
      • 2018-01-03
      • 2016-11-09
      • 1970-01-01
      • 2019-12-08
      • 2014-11-20
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 2022-11-07
      相关资源
      最近更新 更多