Пытаюсь выяснить, почему мой цикл не работает для моего интерпретатора. Это оператор выражения, который я тестирую: "for (int i = 0; i < 10; i = i + 1) { radiate i; }" У меня есть анализатор сверху вниз, который использует контекстно-свободную грамматику универсальный, который отлично анализирует синтаксис цикла. Мой интерпретатор - это обходчик по дереву, посещающий определенные узлы. Пример: двоичный, унарный, группировка, литерал, печать, переменная, если, блок и пока. Итак, когда сюда доберется мой переводчик:
Код: Выделить всё
void interpreter::visitWhileStmt(ContextFreeGrammar::While* stmt) {
Any res = evaluate(stmt->condition);
while (isTruthy(res)) {
execute(stmt->body);
}
return;
}
Вызовы res идентификатора в visitBinaryExpr, который оценивает i < 10;, который возвращает false. Эта часть имеет смысл. Но мой интерпретатор не увеличивает его до 10. Я считаю, что мне не хватает какой-то дополнительной логики
Подробнее здесь:
https://stackoverflow.com/questions/792 ... nterpreter