Warninig 155 在 antlr4 中使用词法模式时



因此,在尝试为以下简单的问题语言子集创建语法时,我在antlr4中使用模式时遇到了问题:

a : abc
a : xyz
a : abc:d
a : someonthertext

语法是:

简单.g4

grammar Simple;    
import SimpleL;    
prog : entry+;    
entry : head semi tail tail_ws;    
semi : SEMI;    
tail : TAIL;    
tail_ws : TAIL_WS;    
head : HEAD;

简单L.g4

lexer grammar SimpleL;
WS : [ trn]+ -> skip;
SEMI : ':' -> pushMode(TMODE);
HEAD : 'a';
mode TMODE;
TAIL_WS:  [ trn]+ -> popMode;
TAIL:[a-z:]+ ;

我使用 antlr4 maven 插件 - 4.2,构建的结果是:

[WARNING] warning(155): ... antlr4/Simple.g4:5:23: rule 'SEMI' contains a lexer command with an unrecognized constant value; lexer interpreters may produce incorrect output

这实际上破坏了Java构建。

[ERROR] ... antlr4/SimpleLexer.java:[63,19] error: cannot find symbol

Eclipse 给出以下错误:

TMODE cannot be resolved to a variable

在这一行上:

case 0: pushMode(TMODE); break;

问题似乎类似于为什么在将令牌分配给通道时出现错误?

ANTLR 4 中的组合语法不能使用多模式词法分析器。导入SimpleL词法分析器时,将忽略TMODE模式。

与其创建lexer grammar和组合语法(仅grammar),不如使用lexer grammarparser grammar

parser grammar Simple;
options {
tokenVocab = SimpleL;
}

相关内容

  • 没有找到相关文章

最新更新