Чем заменить атрибут $type в ANTLR 4?

Вот пример. Этот ($ type) не распознается ANTLR4.

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

Чем это можно заменить?

Спасибо.


person Aftershock    schedule 01.12.2012    source источник
comment
не могли бы вы вместо этого принять ответ 280Z28? Это предпочтительный способ (не зависящий от цели).   -  person Bart Kiers    schedule 04.12.2012


Ответы (2)


В ANTLR v4 выполните:

Number
 : IntegerLiteral {setType(IntegerLiteral);}
 | ...
person Bart Kiers    schedule 01.12.2012

В ANTLR 4 это новый синтаксис:

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

Однако для приведенного выше правила вы должны просто удалить правило Number и убедиться, что правила FloatLiteral и IntegerLiteral не являются правилами фрагмента.

person Sam Harwell    schedule 04.12.2012
comment
Ах да, я знал, что просмотрел что-то более короткое в новой книге Теренса! Возможно, упомянуть, что -> не является оператором перезаписи AST для старых людей v3? :) - person Bart Kiers; 04.12.2012
comment
@ 280Z28 280Z28 Что вы имеете в виду, просто удаляя Numberrule и нефрагментированные правила? Можете ли вы пояснить это для меня, потому что это ответ на мой вопрос - person diyoda_; 26.08.2013