ANTLR在令牌和#x27;B';和十六进制数';B';无前缀

ANTLR在令牌和#x27;B';和十六进制数';B';无前缀,antlr,antlr4,Antlr,Antlr4,我很难找到以下结构语言的正确语法: W1234 B1234[16] B6789 W6789,B 其中1234和6789是任意十进制数。B是没有任何前缀的任何十六进制数 语法: grammar Tsx7; program returns [string code] : ident EOF ; ident returns [string code] : 'W' NUMBER ( ',' ( DEC_DIGITS | HEX_DIGIT )+ )? | 'B' NUMBE

我很难找到以下结构语言的正确语法:

W1234
B1234[16]
B6789
W6789,B
其中1234和6789是任意十进制数。B是没有任何前缀的任何十六进制数

语法:

grammar Tsx7;

program returns [string code]
  : ident EOF
  ;

ident returns [string code]
    : 'W' NUMBER ( ',' ( DEC_DIGITS | HEX_DIGIT )+ )?
    | 'B' NUMBER ( '[' NUMBER ']' )?
    ;

NUMBER: DEC_DIGITS+;
fragment DEC_DIGITS: '0'..'9';
fragment HEX_DIGITS: 'A'..'F';
有了这些(法律)投入

我得到输入不匹配或NoViableAlt异常

如果这些输入工作正常:

W1
B2[8]
B3123
我试了好几种语法,但都找不到正确的

谢谢你的帮助,
Martin

不要在解析器规则中使用lexer片段。它们永远不会出现在解析器中。使这些规则成为普通的lexer规则或定义一个调用片段规则的规则

W1
B2[8]
B3123