我正在尝试使用 flex 和 bison 编写自己的脚本语言。我有一个基本的解析器,我想添加一个与 C 语言 for 语句非常相似的 for 语句。我不清楚如何编写与 for 语句关联的操作
假设我对“for”语句有以下产生式:
forStatement: FOR '(' expr ';' expr ';' expr ')' statements END; {}
我不清楚在与此制作相关的动作中要做什么。
直觉上我明白我应该做一些事情,在与前一个语句相关的动作中,例如:
evaluate($3);
while(evaluate($5)) { execute($9); evaluate($7); }
evaluate($7);
其中评估和执行是两个 C 函数。
所以我有两个问题(假设为与语法产生相关的动作编写 C 代码):
- “评估”的任务是什么。我的意思是,考虑到表达式的值在循环的每一步都可能发生变化,我如何在每个循环中评估表达式?
- “执行”的任务是什么。我的意思是,考虑到每个语句在循环的每一步都有不同的结果,我如何评估 for 循环中的语句。
三个表达式 'expr' 的值在运行时会发生变化,对于 for 主体内的语句也是如此。