c - Antlr 4解析大型c文件需要永远

标签 c performance parsing antlr antlr4

我有一个很大的 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 附加到解析器。这会产生很多“歧义报告”,主要是 关于声明/声明说明符。我认为这会迫使解析器非常频繁地回溯,这可能是解析时间长的原因?

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

感谢任何帮助;)

最佳答案

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

您所指的语法不是 SLL,这会阻止您以最快的模式使用 ANTLR 4。然而,在或实验期间,我们能够确定一条规则,我们改变了这条规则来制作语法 SLL。您可以通过 antlr-interest 邮件列表获得更改后的语法。我现在正在听音乐会,所以我无法访问它。

关于c - Antlr 4解析大型c文件需要永远,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19311864/

相关文章:

使用结构数组调用 C 函数

c# - 使用 Enum.Parse() 时出现意外结果

c# - 获取文件的两个标记行之间的所有内容以便反序列化的最佳方法是什么?

performance - tomcat进程占用所有CPU和大量虚拟内存

parsing - EDI 新手需要有关选择翻译器的建议

c - C 中的命名空间与结构

c - 检索 sqlite 结果集中的行的 rowid

c - 如何在c编程中将函数打印到不同的文件中

javascript - 选择的 AngularJS 性能

android - 应用程序可能在其主线程上做了太多工作