Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
Performance ANTLR4:调用Get解释器()时性能不佳。adaptivePredict_Performance_Antlr4 - Fatal编程技术网

Performance ANTLR4:调用Get解释器()时性能不佳。adaptivePredict

Performance ANTLR4:调用Get解释器()时性能不佳。adaptivePredict,performance,antlr4,Performance,Antlr4,帕尔和亲爱的社区 首先,我要感谢你们令人惊叹的Antlr4(以及整个antlr:-)。 在过去的6个月里,我一直在使用ANTLR3(我已经非常高兴了),但使用antlr4我更开心。我注意到使用java作为目标语言在语法简单性和生成时间方面有了很大的改进。 不幸的是,我对antlr3没有的运行时性能有些担心 下面是我的语法摘录: declare_specs : DECLARE? declare_spec+ | DECLARE ; declare_spec : constant_declarati

帕尔和亲爱的社区

首先,我要感谢你们令人惊叹的Antlr4(以及整个antlr:-)。 在过去的6个月里,我一直在使用ANTLR3(我已经非常高兴了),但使用antlr4我更开心。我注意到使用java作为目标语言在语法简单性和生成时间方面有了很大的改进。 不幸的是,我对antlr3没有的运行时性能有些担心

下面是我的语法摘录:

declare_specs
:
DECLARE? declare_spec+
|
DECLARE
;

declare_spec
:
constant_declaration
| variable_declaration
| exception_declaration
| procedure_body
| function_body
;
这里是生成的代码(我添加了System.out.println用于跟踪):

以下是这些痕迹:

................
TIME: 2013-02-06 09:47:10.417 - declare_specs - 12
TIME: 2013-02-06 09:47:11.023 - declare_specs - 13
.................
TIME: 2013-02-06 09:51:38.915 - DECLARE_SPEC - AFTER
.................
TIME: 2013-02-06 09:51:38.916 - declare_specs - 19
TIME: 2013-02-06 09:52:31.435 - declare_specs - 20
...................
TIME: 2013-02-06 09:52:31.435 - DECLARE_SPEC - INIT
调用_alt=get解释器().adaptivePredict(_input,68,_ctx)时,我丢失了60'';第二次调用_alt=get解释器().adaptivePredict(_input,68,_ctx)时小于1’;第一次。 改变的当然是参数输入和ctx

问题很可能出在我的语法上,但我束手无策。 1.你能告诉我在哪里可以找到解决办法吗。 2.在adaptivePredict中发生了什么;-)

谢谢你的帮助


您好,Wolfgang Hämmer

听起来您的语法中有一个决定需要大量的前瞻性和/或是模棱两可或上下文敏感的。不幸的是,如果没有完整的语法,我们将无法告诉您是哪一个。您可以执行以下操作,将有关歧义的详细信息打印到控制台

parser.addErrorListener(new DiagnosticErrorListener());
parser.getInterpreter().setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);

对不起,亲爱的帕尔先生和亲爱的社区您好,谢谢您的回答!我有三种错误:1。reportAttemptingFullContext d=nnn,输入=xxx'2。reportContextSensitivity d=nnn,输入=xxx'3。reportAmbiguityd=nnn:ambigAlts={1,n,…},input='xxx'我查看了代码:d是DFA中的决策,输入是显而易见的。我怎样才能从d(决定)变成语法中错误的规则?有可能吗?“ParserATNSimulator”类中的代码非常复杂。谢谢你的帮助!你好,沃尔夫冈·哈默
parser.addErrorListener(new DiagnosticErrorListener());
parser.getInterpreter().setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);