野牛意外识别标识错误

时间:2012-08-24 18:18:09

标签: c bison

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

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

int yywrap()
{
        return 1;
}

int main()
{
        yyparse();
}
%}

%token TOKMACHINE TOKLOGIN TOKPASSWORD VALUE SPACE NEWLINE
input: auth input | input;
delim: SPACE | NEWLINE;
auth: TOKMACHINE delim VALUE delim TOKLOGIN delim  VALUE delim  TOKPASSWORD delim VALUE delim
{
    printf("Found auth {%s,%s,%s}", $1,$3,$5);
};

这是简单的野牛语法,我想用它来解析.netrc文件。 但我在input行上收到错误:

netrc.y:23.1-5: syntax error, unexpected identifier:

我是Flex / Bison的新手,但这个示例靠近 here

的文字副本

2 个答案:

答案 0 :(得分:2)

看起来你错过了%%分隔符。做那个

%}
%token ...

%%
input : ...

答案 1 :(得分:2)

您的%%行后需要%token行才能将定义部分与语法部分分开。