代码之家  ›  专栏  ›  技术社区  ›  Song Wukong

yacc:如何“保存”代码以备将来执行?

  •  0
  • Song Wukong  · 技术社区  · 7 年前

    我对如何将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)执行它,语句数据类型是什么?如何构建?我非常感谢您的帮助,谢谢。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Song Wukong    7 年前

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