如何修复非终端从一个规则变为另一个的空值

时间:2019-05-21 02:00:57

标签: c parsing compiler-construction bison

我正在编写一个编译器,现在正在制作AST。显然,在一条规则中,非终端将NULL从一条规则转换为另一条规则。我在这里找不到问题。

我已经尝试使用printf进行调试,但是仍然看不到问题。当我在if ($$)规则中放入一个initval时,它会打印出来,因此$$不为空。但是,当我将if ($2)放在initarray规则中时,它不会打印。数组规则中也会发生同样的情况。

array: ':' initarray {$$ = $2;}
    | %empty {$$ = NULL;}
    ;

initarray: initarray initval {$$ = insert_node($1, $2);}
    | %empty { $$ = NULL; }
    ;

initval: LIT_INTEGER {$$ = make_new_node(AST_symbol, $1);}
    | LIT_FLOAT {$$ = make_new_node(AST_symbol, $1);}
    | LIT_CHAR {$$ = make_new_node(AST_symbol, $1);}
    ;

0 个答案:

没有答案