首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编译lex和yacc文件时出现大量错误

编译lex和yacc文件时出现大量错误
EN

Stack Overflow用户
提问于 2019-04-16 07:12:23
回答 1查看 162关注 0票数 0

我试图用yacc/lex做一个简单的计算器,但我一直收到大量错误,其中很多人说错误在生成的文件中。

我运行gcc lex.yy.c y.tab.c -o minicalc并得到如下错误

代码语言:javascript
运行
复制
bas.y:34:16: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
 int main(void) {
y.tab.c:499:2: error: expected declaration specifiers before ‘;’ token
 };

这些是最常见的,但还有更多。问题是,我得到的错误是

代码语言:javascript
运行
复制
In file included from lex.yy.c:459:0:
/usr/include/unistd.h: In function ‘yyerror’:
/usr/include/unistd.h:258:22: error: storage class specified for parameter ‘useconds_t’
 typedef __useconds_t useconds_t;
                      ^~~~~~~~~~

这使得错误看起来不在我的代码中。

这是我的lex代码:

代码语言:javascript
运行
复制
%{
    #include <stdlib.h>
    #include "y.tab.h"
    void yyerror(char *)
%}

%%

    /* a is value of last expresion */
a   {
        yyval = *yytext - 'a';
        return LAST;
    }

    /* integers */
[0-9]+  {
        yyval = atoi(yytext);
        return INTEGER;
    }

    /* operators */
[-+()=/*\n] { return *yytext; }

    /* skip whitespace */
[ \t]       { ; }

    /* all else is error */
.   yyerror("invalid character");

%%

int yywrap(void) {
    return 1;
}

这是我的yacc代码:

代码语言:javascript
运行
复制
%token INTEGER LAST
%left '+' '-'
%left '*' '/'

%{
    void yyerror(char *)
    int yylex(void);
    int lastval;
%}

%%

program:
    program expr '\n'   { lastval = $2; }
    |
    ;

expr:
        INTEGER
    | LAST          { $$ = lastval; }
    | expr '+' expr     { $$ = $1 + $3; }
    | expr '-' expr     { $$ = $1 - $3; }
    | expr '*' expr     { $$ = $1 * $3; }
    | expr '/' expr     { $$ = $1 / $3; }
    | '(' expr ')'      { $$ = $2; }
    ;

%%

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

int main(void) {
    yyparse();
    return 0;
}

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-04-16 07:21:58

.y.l文件中,void yyerror(char *)后面都缺少一个分号。因此,编译器期望在生成的代码中紧跟其后的行上出现;,从而导致您看到的错误消息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55698416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档