从另一个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文件。 我试过了
- yacc -d calc.y
- lex calc.l
- gcc -o main main.c
但它没有用。
尝试一起编译所有文件,如下所示:
gcc lex.yy.c y.tab.c main.c -o main
并尝试运行如下:
。/主要