从另一个c文件中调用Yacc文件中的函数

我是Lex / Yacc编程的新手。 我有一个关于如何从另一个C文件调用Yacc文件中的函数的问题。 假设我有以下Lex / Yacc代码:

calc.l

%{ #include "y.tab.h" extern int yylval; %} %% [0-9]+ { yylval=atoi(yytext); return NUMBER;} [ \t]; \n return 0; . return yytext[0]; %% 

calc.y

 %{ #include  %} %token NAME NUMBER %% statement: NAME '=' expression | expression {printf("= %d\n",$1); printf("yylval= %d",yylval);} ; expression: NUMBER '+' NUMBER {$$=$1+$3;} | NUMBER '-' NUMBER {$$=$1-$3;} | NUMBER 'x' NUMBER {$$=$1*$3;} | NUMBER '/' NUMBER { if($3 == 0) yyerror("Error, cannot divided by zero"); else $$=$1/$3; } | NUMBER {$$=$1;} ; %% void parse() { while(1) { printf("Please enter numerical expression here: "); yyparse(); } } 

我创建了一个main.c文件,所以我可以在Yacc文件中调用函数void parse(),如下所示:

main.c中

 #include  #include  #include  #include "y.tab.c" #include "lex.yy.c" int main(int argc,char* argv[]) { parse(); } 

问题是如何在main.c中调用void parse()函数以及如何编译main.c以及Lex和Yacc文件。 我试过了

  1. yacc -d calc.y
  2. lex calc.l
  3. gcc -o main main.c

但它没有用。

尝试一起编译所有文件,如下所示:

gcc lex.yy.c y.tab.c main.c -o main

并尝试运行如下:

。/主要