c - Bison/Yacc 中的 For 循环语义

标签 c for-loop semantics bison yacc

我正在尝试使用 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 代码):

  1. “评估”的任务是什么。我的意思是,考虑到表达式的值在循环的每一步都可能发生变化,如何在每个循环中评估表达式?
  2. “执行”的任务是什么。我的意思是,考虑到每个语句在循环的每个步骤都有不同的结果,我如何评估 for 循环内的语句。

三个表达式“expr”的值在运行时发生变化,for 体内的语句也是如此。

最佳答案

看看你的两个问题,你似乎忽略了需要一个执行引擎(一种软件CPU)。该引擎需要记住变量的状态,返回循环的“地址”,...(取决于选择的实现方法)。

所以解析只是第一步。考虑为每个语句和表达式创建一个数据结构,并让该引擎执行它们。

看看stack-based systems .

关于c - Bison/Yacc 中的 For 循环语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15600056/

相关文章:

css - 语义标记和响应式设计——如何在这种特定情况下进行?

c - 请解释一下这段C代码

c - SECCOMP:如何模拟 malloc、realloc 和 free?

java - for循环java不工作

css - 在 Sass (SCSS) 中转义百分比字符

c++ - 序列点、条件和优化

C 在宏中强制转换

c - DMA 传输比 CPU 传输花费更多时间

c - 这段代码的输出是什么?您能解释一下逐步的进展吗?

javascript - for 循环不执行对象