>以下 https://github.com/antlr/antlr4/blob/master/doc/parser-rules.md#rule-element-labels 有没有办法将字段显式添加到规则上下文对象?
我的用例是一系列点和标识符:
dotIdentifierSequence
: identifier dotIdentifierSequenceContinuation*
;
dotIdentifierSequenceContinuation
: DOT identifier
;
通常,我们希望处理dotIdentifierSequence
结构的"完整路径"。 自动取款机 这意味着使用DotIdentifierSequenceContext#getText
. 但是,DotIdentifierSequenceContext#getText
遍历树,访问收集文本的每个子节点。
该文档页面上讨论的规则标签将让我执行以下操作:
dotIdentifierSequence
: i:identifier c+=dotIdentifierSequenceContinuation*
;
并将字段i
和c
添加到点标识符序列上下文中。 但是,要获得完整结构的文本,我仍然必须访问i
节点和每个c
节点。
能够为 DotIdentifierSequenceContext和 DotIdentifierSequenceContinuationContext 定义一个"全序列文本"字符串字段真是太棒了。
这在今天可能吗?
我能找到的唯一方法是:
dotIdentifierSequence
returns [String fullSequenceText]
: (i=identifier { $fullSequenceText = _localctx.i.getText(); }) (c=dotIdentifierSequenceContinuation { $fullSequenceText += _localctx.c.fullSequenceText; })*
;
dotIdentifierSequenceContinuation
returns [String fullSequenceText]
: DOT (i=identifier { $fullSequenceText = "." + _localctx.i.getText(); })
;
这有效,但不幸的是使语法非常不可读。