首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >compilation_undefined引用过程中出错

compilation_undefined引用过程中出错
EN

Stack Overflow用户
提问于 2012-01-31 16:26:14
回答 1查看 2.6K关注 0票数 0

我的文件myComp.l

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

 %%
         [a-z]       {
                  yylval = *yytext - 'a';
                return VAR;
            }
         [0-9]+      {
                yylval = atoi(yytext);
                return INT;
            }
         [-+()=/*\n] { return *yytext; } [ \t]       ;

         .           { yyerror("Input non valido"); }

         %% int yywrap(void){
         return 1; }

这是myComp.y文件

代码语言:javascript
复制
         %{ /* Prologo */
         #define YYSTYPE int
         #include <math.h>
         #include <stdio.h>

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

       /* Definizioni */
       %token INT VAR
       %left '+' '-'
       %left '*' '/'

       %%  


       program:
       program statement '\n'
       |
       ;

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

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

       %%


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

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

我使用以下命令进行编译

代码语言:javascript
复制
       flex myComp.l
       bison -y myComp.y
       gcc -o myComp y.tab.c

但是我有这个错误:

代码语言:javascript
复制
       /tmp/ccaHRWZu.o: In function `yyparse':
       y.tab.c:(.text+0x24a): undefined reference to `yylex'
       collect2: ld returned 1 exit status

我安装的所有程序都是在上一个版本中更新的。我不明白问题出在哪里?我能做些什么来解决这个error.please帮助我修复it.thanks所有的一切

EN

回答 1

Stack Overflow用户

发布于 2012-01-31 20:50:32

您缺少链接器标志-lfl来将解析器链接到定义yylex的flex库。此外,您还需要构建flex的输出。这个c文件可能被称为:myComp.lex.c

使用以下命令编译:

代码语言:javascript
复制
gcc -o myComp y.tab.c myComp.lex.c -lfl
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9076468

复制
相关文章

相似问题

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