Compiler errors “YACC错误”;是非类型化的“;

Compiler errors “YACC错误”;是非类型化的“;,compiler-errors,yacc,Compiler Errors,Yacc,我正在创建一个使用波兰语符号(前缀)的YACC程序。实现起来似乎很简单,但我遇到了一个似乎毫无意义的错误。错误是: yacc:e-calculator.y的第33行,$1('-')是非类型化的 下面是表达式的代码。错误发生在“-”规则上。它停在那里,因为我想先解决这个问题: exp: NUMBER { $$ = $1; } | NAME { $$ = $1->value; } | NAME '

我正在创建一个使用波兰语符号(前缀)的YACC程序。实现起来似乎很简单,但我遇到了一个似乎毫无意义的错误。错误是:

yacc:e-calculator.y的第33行,$1('-')是非类型化的

下面是表达式的代码。错误发生在“-”规则上。它停在那里,因为我想先解决这个问题:

exp:  NUMBER                  { $$ = $1; }
       | NAME                  { $$ = $1->value; }
       | NAME '=' exp         { $1->value = $3; $$ = $3; }
       | exp EQ exp      { $$ = $1 == $3; }
       | '-' exp exp        { $$ = $1 - $3; }
;
奇怪的是,当我尝试使用中缀符号时,它工作得很好。我知道这个错误通常发生在标记没有正确键入时,但它们是正确的,因为它们使用中缀符号。你知道为什么前缀会突然改变吗

    | '-' exp exp        { $$ = $1 - $3; }
在这里,您试图从
-
标记中减去第二个表达式,它是非类型的,没有任何意义。你可能想要

    | '-' exp exp        { $$ = $2 - $3; }
要从第一个表达式中减去第二个表达式

在这里,您试图从
-
标记中减去第二个表达式,它是非类型的,没有任何意义。你可能想要

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

要从第一个表达式中减去第二个表达式…

哦,我明白了!我误解了代币的顺序。谢谢哦,我明白了!我误解了代币的顺序。谢谢