2017-06-13 31 views
1

我是ANTLR的新手。我才发现,原来这是可能的标记每个替代在生产像这样:为什么ANTLR要求标记全部或者没有选项?

foo 
    : a # aLabel 
    | b # bLabel 
    | // ... 
    ; 

不过,我觉得不愉快的是全或无的选择必须贴有标签。我最近只需要为20多家分公司标注2种产品的替代品,而我最终为其他产品标注了# stubLabel。是否有任何理由说明为什么所有标签都没有标签?

回答

3

只要你添加一个标签ANTLR4将不再生成该规则对每个ALT上下文类,而是个别的上下文类。这不能混合使用(例如,对于整个规则以及仅在某些alt中同时存在上下文)。一旦开始使用标签并且不再生成规则上下文,则必须为所有的alt生成上下文,否则将会丢失某些内容。

1

好的,我相信我已经想通了。假定为了节省空间,与每个标签相对应的节点从与生产相对应的节点被分类,而不是它的孩子。

expression 
    : // ... 
    | foo # namedMethodInvocation 
    ; 

成为

相关问题