使用词法模式与antlr4时的警告155

时间:2014-03-08 16:09:54

标签: java maven antlr4

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

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

语法是:

Simple.g4

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

SimpleL.g4

lexer grammar SimpleL;

WS : [ \t\r\n]+ -> skip;
SEMI : ':' -> pushMode(TMODE);
HEAD : 'a';
mode TMODE;
TAIL_WS:  [ \t\r\n]+ -> 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;

问题与Why am I getting an error when assigning tokens to a channel?

类似

1 个答案:

答案 0 :(得分:2)

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

您应该使用lexer grammargrammar,而不是创建lexer grammar和组合语法(仅parser grammar)。

parser grammar Simple;

options {
  tokenVocab = SimpleL;
}