Bison:语法错误,意外的文件结束

时间:2014-06-07 03:39:44

标签: syntax bison

这是我的thermo.l文件

%{
#include <stdio.h>
#include "y.tab.h"
%}
%%
[0-9]+                  return NUMBER;
heat                    return TOKHEAT;
on|off                  return STATE;
target                  return TOKTARGET;
temperature             return TOKTEMPERATURE;
\n                      /* ignore end of line */;
[ \t]+                  /* ignore whitespace */;
%%

这是我的thermo.y文件

%{
#include <stdio.h>
#include <string.h>

void yyerror(const char *str)
{
        fprintf(stderr,"error: %s\n",str);
}

int yywrap()
{
        return 1;
} 

main()
{
        yyparse();
} 

%}

%token NUMBER TOKHEAT STATE TOKTARGET TOKTEMPERATURE

这是y.tab.h文件

commands: /* empty */
        | commands command
        ;

command:
        heat_switch
        |
        target_set
        ;

heat_switch:
        TOKHEAT STATE
        {
                printf("\tHeat turned on or off\n");
        }
        ;

target_set:
        TOKTARGET TOKTEMPERATURE NUMBER
        {
                printf("\tTemperature set\n");
        }
        ;

我试图编译我的THERMO.Y文件,但它给了我一个错误。 “错误:语法错误,文件意外结束” *请注意我正在使用野牛。

flex thermo.l
bison -y -d thermo.y
gcc -g -c lex.yy.c y.tab.c
gcc -g -0 thermo.n lex.yy.o y.tab.0 -ll

有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

您的语法应该是.y文件的 part ,如bison manual中的示例所示:

 %{
   Prologue
 %}

 Bison declarations

 %%
 Grammar rules
 %%

 Epilogue

需要第一个%%和至少一个语法规则;如果你没有它们,你将会收到意外的EOF错误。

恕我直言,你不应该使用-y标志,但如果你这样做,你会发现bison会覆盖你的y.tab.h文件。