我正在编写一个编译器,现在正在制作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);}
;