我正在尝试使用 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 体内的语句也是如此。
最佳答案
看看你的两个问题,你似乎忽略了需要一个执行引擎(一种软件CPU)。该引擎需要记住变量的状态,返回循环的“地址”,...(取决于选择的实现方法)。
所以解析只是第一步。考虑为每个语句和表达式创建一个数据结构,并让该引擎执行它们。
关于c - Bison/Yacc 中的 For 循环语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15600056/