标签: antlr grammar antlr4
我是ANTLR的新手。我刚刚发现可以在生产中标记每个替代品,如下所示:
foo : a # aLabel | b # bLabel | // ... ;
然而,我发现必须标记所有或没有替代品是令人不快的。我最近需要在20个分支机构中标记两个生产的替代品,最后我标记了其他每个分支# stubLabel。有没有理由为什么全部或者没有必须贴上标签?
# stubLabel
答案 0 :(得分:5)
一旦添加标签,ANTLR4将不再为该规则生成上下文类,而是为每个alt生成单独的上下文类。这不能混合(例如,具有整个规则的上下文,并且同时仅具有一些上下文的上下文)。一旦开始使用标签并且不再生成规则上下文,您必须为所有alts生成上下文或者缺少某些内容。
答案 1 :(得分:4)
好的,我相信我已经弄明白了。大概是为了节省空间,对应于每个标签的节点是从与生产相对应的节点子类化的,而不是它的子节点。
expression : // ... | foo # namedMethodInvocation ;
变为