gpt4 book ai didi

compiler-construction - lex 程序中对 yylval 的 undefined reference

转载 作者:行者123 更新时间:2023-12-05 04:10:55 24 4
gpt4 key购买 nike

我正在处理 Lex 和 Yacc 程序,但出现错误:

/tmp/ccTP9YY1.o: In function yylex':
lex.yy.c:(.text+0x289): undefined reference to
yylval' lex.yy.c:(.text+0x2a8): undefined reference to `yylval' collect2: error: ld returned 1 exit status

我在互联网上搜索了很多,比如 stackoverflow 和其他网站,但似乎没有一个能够解决我的问题。我可能错误地实现了这些建议。谁能给我一些建议吗?提前致谢。

%{
#include <stdlib.h>
#include "y.tab.h"
void yyerror(char *);
%}
%%
[a-z] {
yylval = *yytext - 'a';
return VARIABLE;
}
[0-9]+ {
yylval = atoi(yytext);
return INTEGER;
}
[-+()=/*\n] { return *yytext; }
[ \t] ;
. { yyerror("invalid character"); }

%%

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

int yywrap(void) {
return 1;
}

使用的命令:

rohit@rohit-HP-Pavilion-g4-Notebook-PC:~$ lex echo.l
rohit@rohit-HP-Pavilion-g4-Notebook-PC:~$ yacc -d yaccCalc.y
rohit@rohit-HP-Pavilion-g4-Notebook-PC:~$ gcc lex.yy.c y.tab.h -ll
/tmp/ccTP9YY1.o: In function `yylex':
lex.yy.c:(.text+0x289): undefined reference to `yylval'
lex.yy.c:(.text+0x2a8): undefined reference to `yylval'
collect2: error: ld returned 1 exit status

Yacc 文件:

%token INTEGER VARIABLE
%left '+' '-'
%left '*' '/'

%{
void yyerror(char *);
int yylex(void);
int sym[26];
%}

%%

program:
program statement '\n'
|
;

statement:
expr { printf("%d\n", $1); }
| VARIABLE '=' expr { sym[$1] = $3; }
;

expr:
INTEGER
| VARIABLE { $$ = sym[$1]; }
| expr '+' expr { $$ = $1 + $3; }
| expr '-' expr { $$ = $1 - $3; }
| expr '*' expr { $$ = $1 * $3; }
| expr '/' expr { $$ = $1 / $3; }
| '(' expr ')' { $$ = $2; }
;

%%

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

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

最佳答案

您应该编译.c 文件,而不是.h 文件。下面是编译 lex 和 yacc 程序所需的命令:

1. yacc -d yaccCalc.y
2. lex echo.l
3. cc lex.yy.c y.tab.c -ll -ly

关于compiler-construction - lex 程序中对 yylval 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43692446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com