Sav*_*ran 4 parsing antlr definition implicit token
一件奇怪的事情正在发生。我定义了语法,这是节选。
name
: Letter
| Digit name
| Letter name
;
numeral
: Digit
| Digit numeral
;
fragment
Digit
: [0-9]
;
fragment
Letter
: [a-zA-Z]
;
Run Code Online (Sandbox Code Playgroud)
那么为什么它只对我引用一个片段的两行(字母和数字名称)显示警告,而下面的其他行完全正确...
您标记为fragment的Lexer规则只能由其他lexer规则使用,而不能由解析器规则使用。片段规则永远不会成为它们自己的标记。
确保您了解其中的区别:ANTLR中的“碎片”是什么意思?
另外,我现在看到您在解析器中做得太多。规则name和numeral真的应该是一个词法规则:
Name
: ( Digit | Letter)* Letter
;
Numeral
: Digit+
;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您无需Space在任何解析器规则中都考虑一个规则(这是关于您刚刚删除的最后一个问题)。