野牛语法错误(初学者)

时间:2009-10-11 15:04:52

标签: yacc bison

我回来了,现在正在编写我自己的语言和我的操作系统,但是由于我现在开始开发自己的开发语言,因此在使用Bison时我遇到了一些错误,我不知道如何解决它们。这是我的* .y文件代码:

input:
        | input line
;

line:     '\n'
        | exp '\n'  { printf ("\t%.10g\n", $1); }
;

exp:      NUM             { $$ = $1;         }
        | exp exp '+'     { $$ = $1 + $2;    }
        | exp exp '-'     { $$ = $1 - $2;    }
        | exp exp '*'     { $$ = $1 * $2;    }
        | exp exp '/'     { $$ = $1 / $2;    }
      /* Exponentiation */
        | exp exp '^'     { $$ = pow ($1, $2); }
      /* Unary minus    */
        | exp 'n'         { $$ = -$1;        }
;
%%

当我尝试将Bison与此源代码一起使用时,我收到此错误:

  

calc.y:1.1-5:语法错误,意外标识符:

2 个答案:

答案 0 :(得分:7)

你需要在规则之前和之后使用'%%'(或者严格地说,如果在第二个'%%'之后没有代码,你可以省略该行)。

在第一个'%%'之前,你还需要一个'%token NUM';然后语法通过了Bison。

答案 1 :(得分:0)

存在另一种替代解决方案,即升级到bison版本3.0.4。我想在版本2.x3.x之间,他们更改了文件语法。