我正在创建一个使用波兰表示法(前缀)的YACC程序。实现起来似乎很简单,但我收到的错误似乎没有意义。错误是:
yacc:e - 第34行" calculator.y",$ 1(' - ')是无类型的
这是表达式的代码。错误发生在' - '规则。它停在那里因为我想首先解决这个问题:
exp: NUMBER { $$ = $1; }
| NAME { $$ = $1->value; }
| NAME '=' exp { $1->value = $3; $$ = $3; }
| exp EQ exp { $$ = $1 == $3; }
| '-' exp exp { $$ = $1 - $3; }
;
奇怪的是,当我使用中缀表示法时,它工作正常。我知道这个错误通常发生在令牌没有正确输入时,但它们是因为它们使用中缀表示法。任何想法为什么会突然改变前缀?
答案 0 :(得分:0)
| '-' exp exp { $$ = $1 - $3; }
在这里,您尝试从-
令牌中减去第二个表达式,这是无类型的,并且没有任何意义。你可能想要
| '-' exp exp { $$ = $2 - $3; }
从第一个表达式...
中减去第二个表达式