我对 ANTLR 4 有以下语法:
grammar Pattern;
//parser rules
parse : string LBRACK CHAR DASH CHAR RBRACK ;
string : (CHAR | DASH)+ ;
//lexer rules
DASH : '-' ;
LBRACK : '[' ;
RBRACK : ']' ;
CHAR : [A-Za-z0-9] ;
我正在尝试解析以下字符串
ab-cd[0-9]
代码解析出ab-cd
左边的,在我的应用程序中将被视为文字字符串。然后它解析[0-9]
为一个字符集,在这种情况下将转换为任何数字。我的语法对我有用,除了我不喜欢(CHAR | DASH)+
在它被简单地视为标记时作为解析器规则。我宁愿词法分析器创建一个STRING
标记并给我以下标记:
"ab-cd" "[" "0" "-" "9" "]"
而不是这些
"ab" "-" "cd" "[" "0" "-" "9" "]"
我查看了其他示例,但无法弄清楚。通常,其他示例在此类字符串文字周围有引号,或者它们有空格来帮助分隔输入。我想避免两者。这可以通过词法分析器规则来完成,还是我需要像我正在做的那样继续在解析器规则中处理它?