从main.c调用yyin和yyparse时出错

时间:2011-05-01 10:49:04

标签: c linker yacc lex

嗨,我收到了以下错误

main.c: undefined reference to yyin
main.c: undefined reference to yyparse

这就是我在做的事情 我有一个lex文件 A.L 一个yacc文件 b.y

main.c是:

#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
extern int  yyparse();
extern FILE *yyin;
FILE *outFile_p;
main(int argc,char *argv[])
{
 if(argc<3)
  {
   printf("Please specify the input file & output file\n");
   exit(0);
  }
 FILE *fp=fopen(argv[1],"r");
 if(!fp)
 {
  printf("couldn't open file for reading\n");
  exit(0);
 }
  outFile_p=fopen(argv[2],"w");
  if(!outFile_p)
  {
   printf("couldn't open temp for writting\n");
   exit(0);
  }
  yyin=fp;
  yyparse();
 fclose(fp);
 fclose(outFile_p);
}

在此之前我必须链接:
x.h 和x.c。

我在终端上写下以下命令:

lex a.l  
yacc -v -d b.y   
gcc -o x.o -c x.c    
gcc -o main.o -c main.c     
gcc -o myexecutable main.o x.o    

当我收到此错误时。我做错了什么?

2 个答案:

答案 0 :(得分:3)

您似乎忽略了lex和yacc生成的.c文件。它们通常被称为y.tab.clex.yy.c,但您最好自己检查一下。然后调用序列应该类似于以下内容:

lex a.l  
yacc -v -d b.y
gcc -c y.tab.c
gcc -c lex.yy.c
gcc -c x.c    
gcc -c main.c     
gcc -o myexecutable *.o

答案 1 :(得分:3)

我只是想通了。 将以下内容添加到main.c文件中:

    extern FILE *yyin;
    extern FILE *yyout;
    extern int yyparse(void);