繁体   English   中英

Antlr 4解析大型C文件需要花费很多时间

[英]Antlr 4 parsing large c file takes forever

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

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

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

经过研究后,我将预测模式设置为SLL,这会在几秒钟内产生“输入时没有可行的选择”。

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

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

任何帮助表示赞赏;)

首先,请务必注意,ANTLR 4在解析过程中绝不会回退。

您所指的语法不是SLL,这会阻止您以最快的方式使用ANTLR 4。 但是,在或实验期间,我们能够识别出一条单独的规则,然后对其进行了更改以制作语法SLL。 您可能可以通过关注兴趣的邮件列表获取更改的语法。 我正在参加一场音乐会,因此无法访问它。

是的。 我们仅需更改一个规则即可将其从规范中转换为演示,您可以做到这一点。 我们将尽快对其进行优化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM