Как изменить входной поток в Javacc?

Есть ли способ изменить входной поток во время синтаксического анализа с помощью Javacc? У меня есть случай использования, когда я хочу заменить токен строкой во время синтаксического анализа, а затем проанализировать эту замененную строку.

Например,

define var $x="2*2";
evaluate $x;

Итак, во время синтаксического анализа, когда я сталкиваюсь с любым токеном, который в этом случае начинается с $ like $ x, я должен выполнить встроенную замену, а затем проанализировать его, как правило, с помощью Javacc.

Итак, из приведенного выше примера это означает, что я должен проанализировать следующий оператор после встроенной замены:

evaluate "2*2";

Возможно ли это в Javacc? Можем ли мы изменить входной поток, чтобы, увидев специальный токен, я добавил его встроенную замену во входной поток?

Спасибо.


person invinc4u    schedule 08.06.2013    source источник


Ответы (1)


Обычный способ сделать это - выполнить предварительную обработку перед началом синтаксического анализа - именно так обычно работают компиляторы C. Если вы должны сделать это во время синтаксического анализа, вам нужно будет использовать настраиваемый входной поток - см. Документацию о том, как это сделать. И вы должны быть очень осторожны с прогнозированием.

person Theodore Norvell    schedule 06.12.2013