我很难找到具有以下结构的语言的正确语法:
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';
使用这些(合法)输入
W1,B
W34,1
我得到 InputMismatch 或 NoViableAlt 例外。
这些输入可以正常运行:
W1
B2[8]
B3123
我尝试了几种语法,却找不到正确的语法。
感谢您的帮助, 马丁
答案 0 :(得分:0)
不要在解析器规则中使用词法分析器片段。它们永远不会出现在解析器中。使这些规则成为普通词法规则或定义一个调用片段规则的规则。