所以,我有一个非常简单的ANTLR4语法:
grammar TestGrammar;
@header {
package com.xxxxxx;
}
start_rule: (Function | IDENTIFIER)* EOF;
Function
:
IDENTIFIER Parameter
;
Parameter
: '(' (IDENTIFIER) ')'
;
IDENTIFIER
:
('A'..'Z' | 'a'..'z')*
;
WS
: [ \t]+
-> skip
;
OTHER : . -> skip ; //make it a fuzzy parser
这当然是一个人为的例子,但展示了我的问题。当我提供一些示例输入时,如:
foo bar(x) baz
我当然希望得到一棵带有foo和baz的树。但我也希望看到一个带有两个子节点的条形节点,一个用于函数的标识符名称,然后一个用于参数名称。
然而,我实际上最终看到的只是一个令牌的平面列表,似乎无法在功能令牌中进一步递减。像这样:
我通过覆盖生成的BaseListener来走这棵树。当在其中观察visitEveryRule函数时,我看到每个顶级规则的节点,但是没有遇到参数的子节点。
如何单独检索参数标识符标记(名称)和函数标识符标记?