Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Antlr 4解析大型c文件需要花费很长时间_C_Performance_Parsing_Antlr_Antlr4 - Fatal编程技术网

Antlr 4解析大型c文件需要花费很长时间

Antlr 4解析大型c文件需要花费很长时间,c,performance,parsing,antlr,antlr4,C,Performance,Parsing,Antlr,Antlr4,我有一个很大的c代码文件(>9000 LoC),并尝试使用以下语法对其进行解析: 我等了一个多小时才堕胎。这台机器是一台2芯Duo L9400,内存为4GB。最大java vm堆大小设置为2GB。 它不会产生任何解析错误,但它不会完成 在做了一些研究之后,我将预测模式设置为SLL,这将产生一个 在几秒钟内“输入时没有可行的替代方案” 接下来,我将预测模式设置为LL_EXACT_AMBIG_DETECTION,并将DiagnosticeErrorListener附加到解析器。这就产生了大量的“歧

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

我等了一个多小时才堕胎。这台机器是一台2芯Duo L9400,内存为4GB。最大java vm堆大小设置为2GB。 它不会产生任何解析错误,但它不会完成

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

接下来,我将预测模式设置为LL_EXACT_AMBIG_DETECTION,并将DiagnosticeErrorListener附加到解析器。这就产生了大量的“歧义报告”,主要是 关于声明/声明说明符。我假设这会迫使解析器非常频繁地回溯,这可能是我对长时间解析的解释

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


感谢您的帮助;)

是的。我们从规范中转换过来,只需一次规则更改,就可以证明您可以做到这一点。我们将很快对其进行优化。

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


您所指的语法不是SLL,这会阻止您以最快的模式使用ANTLR 4。然而,在or实验中,我们能够识别出一条规则,并对其进行了修改,使其成为SLL语法。您可以通过antlr兴趣邮件列表获得修改后的语法。我现在在听音乐会,所以我没办法看

我有点不好意思承认,但我找不到antlr 4兴趣邮件列表。你能给我指一下正确的方向吗,或者甚至是语法?仅指antlr 3邮件列表的存档。