我对如何将yacc解析的语法规则“保存”到抽象语法树中存在误解。以下是我的yacc文件:
expression:
expr2 { $$ = $1; }
| expr2 EQ expr2 { $$ = ($1 == $3); }
| expr2 NE expr2 { $$ = ($1 != $3); }
| expr2 LT expr2 { $$ = ($1 < $3); }
| expr2 LE expr2 { $$ = ($1 <= $3); }
| expr2 GT expr2 { $$ = ($1 > $3); }
| expr2 GE expr2 { $$ = ($1 >= $3); }
;
expr2:
expr3 { $$ == $1; }
| expr2 PLUS expr3 { $$ = $1 + $3; }
| expr2 MINUS expr3 { $$ = $1 - $3; }
;
expr3:
expr4 { $$ = $1; }
| expr3 MULT expr4 { $$ = $1 * $3; }
| expr3 DIVIDE expr4 { $$ = $1 / $3; }
;
正如您所看到的,所有操作都是动态执行的。我想做一些类似于:
expr2 PLUS expr3 { $$ = save_code_for_addition($1, $3); }
将此操作存储为抽象语法树的节点。
请有人解释一下这样一条预存指令的内部表示是什么,以及我以后如何通过execute(语句s)执行它,语句数据类型是什么?如何构建?我非常感谢您的帮助,谢谢。