Как реализовать цикл while на YACC
Есть множество примеров калькуляторов на YACC, которые работают в режиме интерпретации (вычисления сразу же). Типа
expr : Number
{
$$.number = $1.number;
}
| expr '+' expr
{
$$.number = $1.number + $3.number;
}
| expr '-' expr
{
$$.number = $1.number - $3.number;
}
| '-' expr %prec uminus
{
$$.number = -$2.number;
}
| '+' expr %prec uminus
Хочу сделать мощный калькулятор, с переменными, циклами и т.п.
Переменные добавил, все работает. Но как добавить цикл, например, while?
statement | WHILE '(' expr ')' statement ';'
компилирует, но как его заставить считать? Если я пишу что-то вроде
{
while($3.number) { $5; }
}
то очевидно, что ничего не работает, потому что $3 и $5 вычисляются один раз. Подскажите, как быть? Как правильно реализовать циклические вычисления в режиме интерпретатора (вычисления при компиляции)?