1

我正在为分配语言构建一个小型编译器。

考虑以下规则:

var_block : 
  | LPAREN var_decl+ RPAREN { var_scope := var_scope + 1 };

是在第一次识别 var_block 时触发语义动作,还是在达到产生式结束时触发(在本例中为 RPAREN)?

4

2 回答 2

7

您的问题正是为什么您不应该这样做。

不要做生产规则中对订单敏感的副作用。产生式规则应该用于构建代表您的程序的数据结构。完成此操作后,您可以分析/执行/无论如何。

于 2017-08-15T19:29:19.320 回答
1

它在整个生产被读取后触发。

于 2017-08-15T19:09:28.593 回答