我想匹配以下输入:

statement span=1m 0_dur=12

具有以下语法:

options {
language = Java;
output=AST;
ASTLabelType=CommonTree; 
}

statement :'statement' 'span' '=' INTEGER 'm' ident '=' INTEGER;

INTEGER 
:   DIGIT+
    ;

ident : IDENT | 'AVG' | 'COUNT';

IDENT
:   (LETTER | DIGIT | '_')+  ;

WHITESPACE  
:   ( ' '
    | '\t'
    | '\r'
    | '\n'
    ) {$channel=HIDDEN;}
    ;

fragment 
LETTER : ('a'..'z' | 'A'..'Z') ;

fragment 
DIGIT : '0'..'9';

但这会导致错误:

MismatchedTokenException:行1:15不匹配的输入'1m'期望为'\\ u0004'

有谁知道如何解决这个问题?

谢谢查尔斯

===============>>#1 票数:0 已采纳

我认为您的语法是上下文相关的,即使在词法分析器(Tokenizer)级别也是如此。 字符串“ 1m”被识别为IDENT,而不是INTEGER,后跟“ m”。 您可以重新定义语法,或使用谓词分析,或将Java代码嵌入语法中以检测上下文(例如,如果数字在“ span”后出现“ =”,则将其解析为INTEGER)。

  ask by Aeris translate from so

未解决问题?本站智能推荐: