YACC错误"是无类型的"

时间:2016-03-25 19:43:41

标签: compiler-errors yacc

我正在创建一个使用波兰表示法(前缀)的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; }
;

奇怪的是,当我使用中缀表示法时,它工作正常。我知道这个错误通常发生在令牌没有正确输入时,但它们是因为它们使用中缀表示法。任何想法为什么会突然改变前缀?

1 个答案:

答案 0 :(得分:0)

    | '-' exp exp        { $$ = $1 - $3; }

在这里,您尝试从-令牌中减去第二个表达式,这是无类型的,并且没有任何意义。你可能想要

    | '-' exp exp        { $$ = $2 - $3; }

从第一个表达式...

中减去第二个表达式