В примере LabeledExpr.g4 в книге описано, как использовать классы посетителей для одиночных игр. Но если я хочу посетить класс, который является коллекцией, как мне это сделать? например для грамматики:Как написать классы посетителей для коллекций?
prog: stat+ ;
stat: expr NEWLINE # printExpr
;
Функция посетителя для печати показана как:
public Integer visitPrintExpr(LabeledExprParser.PrintExprContext ctx) {
Integer value = visit(ctx.expr()); // evaluate the expr child
System.out.println(value); // print the result
return 0; // return dummy value
}
Что бы соответствующую функция посетителя для «стата +», так что я могу пройти список «стат» ?
Причина, по которой я ищу это, я могу сначала проанализировать и сохранить всю объектную модель в памяти, а затем выполнить несколько проходов посещения и анализа (вместо того, чтобы «на лету» оценивать/печатать как показывает пример книги).
Связанный вопрос: если я создаю некоторые структуры данных в файле грамматики (как показано в ActionExpr.g4 в книге), как мне получить доступ к этим структурам данных в функциях посетителя? например как получить доступ к классу Expr, созданному ниже, в функции посетителя?
stat [Expr e]
: expr NEWLINE # printExpr
{$e = new Expr($expr);}
;
Спасибо. Но теперь у меня другая проблема - код работает в eclipse, но не в командной строке (ни окна, ни unix). Я задал другой вопрос, потому что это похоже на ошибку - 20138858. – R71