在https://github.com/antlr/antlr4/blob/master/doc/parser-rules.md#rule-element-labels之后是否可以将字段显式添加到规则上下文对象?
我的用例是一系列点和标识符:
dotIdentifierSequence
: identifier dotIdentifierSequenceContinuation*
;
dotIdentifierSequenceContinuation
: DOT identifier
;
通常,我们想要处理dotIdentifierSequence
结构的“完整路径”。 Atm表示使用DotIdentifierSequenceContext#getText
。但是,DotIdentifierSequenceContext#getText
步行到树中访问每个收集文本的子节点。
该文档页面上讨论的规则标签可以让我这样做:
dotIdentifierSequence
: i:identifier c+=dotIdentifierSequenceContinuation*
;
并将字段i
和c
添加到DotIdentifierSequenceContext。但是,要获取完整结构的文本,我仍然必须访问i
节点和每个c
节点。
很棒的是能够为DotIdentifierSequenceContext和DotIdentifierSequenceContinuationContext定义一个“完整序列文本”字符串字段。
今天有可能吗?
答案 0 :(得分:0)
我能找到的唯一方法是:
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(); })
;
这是可行的,但不幸的是使语法难以理解。