我有以下语法:
grammar tryout;
tryout : my_cmd
;
my_cmd
: 'start' '0'..'9'+ Name_string
;
Digit
: '0'..'9'
;
Name_string
: ('A'..'Z' | 'a'..'z') ('A'..'Z' | 'a'..'z' | '0'..'9' | '_')*
;
如果我在 ANTLRworks 中看到图表,'0'..'9'+ 显示为空元素,因此 Java 代码编译失败,因为生成的代码具有“if ()”语句;如果我在命令行运行,编译也会失败。
解决方法是将 '0'..'9'+ 移动到词法分析器规则中。
grammar tryout;
tryout : my_cmd
;
my_cmd
: 'start' Digit+ Name_string
;
Digit
: '0'..'9'
;
Name_string
: ('A'..'Z' | 'a'..'z') ('A'..'Z' | 'a'..'z' | '0'..'9' | '_')*
;
但我想知道这是否是一个错误。为什么范围元素不能在解析器规则中使用?这是在 ANTLR v3.4 上。