Menhir的语义行为

San*_*les 1 compiler-construction ocaml menhir

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

请考虑以下规则:

var_block : 
  | LPAREN var_decl+ RPAREN { var_scope := var_scope + 1 };
Run Code Online (Sandbox Code Playgroud)

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

Dru*_*rup 7

你的问题正是你不应该这样做的原因.

不要做生产规则中对订单敏感的副作用.应使用Productions规则来构建代表您的程序的数据结构.完成后,您可以分析/执行/不管它.