Menhir 上的语义操作
Semantic actions on Menhir
我正在为赋值语言构建一个小型编译器。
考虑以下规则:
var_block :
| LPAREN var_decl+ RPAREN { var_scope := var_scope + 1 };
语义动作是在 var_block 首次被识别时触发,还是在达到生产结束时触发(在本例中为 RPAREN)?
整个作品读完后触发
您的问题正是您不应该这样做的原因。
不要做生产规则中顺序敏感的副作用。应该使用生产规则来构建代表您的程序的数据结构。完成后,您可以 analyze/execute/whatever 它。
我正在为赋值语言构建一个小型编译器。
考虑以下规则:
var_block :
| LPAREN var_decl+ RPAREN { var_scope := var_scope + 1 };
语义动作是在 var_block 首次被识别时触发,还是在达到生产结束时触发(在本例中为 RPAREN)?
整个作品读完后触发
您的问题正是您不应该这样做的原因。
不要做生产规则中顺序敏感的副作用。应该使用生产规则来构建代表您的程序的数据结构。完成后,您可以 analyze/execute/whatever 它。