如何使用默认值替换丢失的可选标记?

时间:2012-11-14 23:56:56

标签: antlr antlr3

想象一下,我有以下规则。我想让TYPE_ID成为可选项,但如果它丢失,则将其替换为AST中的某个默认值。

assignment : TYPE_ID? ID '->' expression 
TYPE_ID : ('A'..'Z')('a'..'z'|'A'..'Z'|'0'..'9')* ;

例如,我有以下代码要解析,根据上述规则,假设expression可以根据需要运行。

monday -> 1.
Number tuesday -> 2.

我希望AST在monday的{​​{1}}前面的Number前面有一个的东西。{/ p}显示在下一个树中。

我搜索过并搜索过,无法弄清楚如何做到这一点?

1 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

tokens {
  EMPTY;
}

 assignment :   TYPE_ID ID  '->' expression -> ^( TYPE_ID ID '->' expression)
            |   ID          '->' expression -> ^( EMPTY ID '->' expression)
            ;