3

想象一下,我有以下规则。我想将其设为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的同一个地方。Number

我已经搜索和搜索,无法弄清楚如何做到这一点?

4

1 回答 1

3

您可以执行以下操作:

tokens {
  EMPTY;
}

 assignment :   TYPE_ID ID  '->' expression -> ^( TYPE_ID ID '->' expression)
            |   ID          '->' expression -> ^( EMPTY ID '->' expression)
            ;
于 2012-11-15T10:46:09.367 回答