Menhir 上的语义操作

Semantic actions on Menhir

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

考虑以下规则:

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

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

整个作品读完后触发

您的问题正是您不应该这样做的原因。

不要做生产规则中顺序敏感的副作用。应该使用生产规则来构建代表您的程序的数据结构。完成后,您可以 analyze/execute/whatever 它。