能够显式定义"rule element labels"



>以下 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*
;

并将字段ic添加到点标识符序列上下文中。 但是,要获得完整结构的文本,我仍然必须访问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(); })
;

这有效,但不幸的是使语法非常不可读。

相关内容

  • 没有找到相关文章

最新更新