yacc:如何"保存"将来执行的代码?

时间:2018-02-06 02:40:34

标签: data-structures abstract-syntax-tree yacc

我误解了如何拯救"由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); }

将此操作存储为抽象语法树的节点。

有人可以请您解释一下这种预先存在的指令的内在表示形式,以及我以后如何通过执行(Statement s)执行它,什么是Statement数据类型?如何构建它?我真的很感激任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

我找到了一本完全回答这个问题的手册: http://web.eecs.utk.edu/~bvz/teaching/cs461Sp11/notes/parse_tree/