ANTLR 4中$ type属性的替换是什么?

时间:2012-12-01 20:38:01

标签: antlr4

这是一个例子。 ANTLR4无法识别此($ type)。

Number //options { backtrack=true; }
  :  IntegerLiteral { $type = IntegerLiteral; }
  |  FloatLiteral { $type = FloatLiteral; }
  | IntegerLiteral { $type = IntegerLiteral; }
  ;

可以用什么代替?

谢谢。

2 个答案:

答案 0 :(得分:5)

在ANTLR 4中,这是新语法:

Foo
  : Bar -> type(SomeType)
  | ...
  ;

但是,对于上面的规则,您应该删除Number规则,并确保FloatLiteralIntegerLiteral规则不是片段规则。

答案 1 :(得分:2)

在ANTLR v4中,执行:

Number
 : IntegerLiteral {setType(IntegerLiteral);}
 | ...