Jam*_* Ko 2 grammar antlr antlr4
我是ANTLR的新手。我刚刚发现,可以像这样在生产中标记每个替代品:
foo
: a # aLabel
| b # bLabel
| // ...
;
Run Code Online (Sandbox Code Playgroud)
但是,我发现必须标记所有替代方案或不标记替代方案是令人不快的。最近,我只需要标记具有20个以上分支的产品中的2个替代品,最后我标记了每个其他替代品# stubLabel
。有什么理由要全部或不加标签?
好的,我相信我已经弄清楚了。大概是为了节省空间,每个标签对应的节点是从对应于生产的节点子类化的,而不是它的子节点。
expression
: // ...
| foo # namedMethodInvocation
;
Run Code Online (Sandbox Code Playgroud)
变成
一旦添加标签,ANTLR4将不再为该规则生成上下文类,而是为每个替代生成单独的上下文类。这不能混合使用(例如,具有整个规则的上下文,而同时仅具有某些替代项的上下文)。一旦开始使用标签并且不再生成规则上下文,则必须为所有替代生成上下文,否则将丢失某些内容。