我在VMware Workstation上運行我的fedora。我有一個lex和yacc程序。編譯程序工作正常,但是當我通過gcc y.tab.c lex.yy.c -ll
運行程序時,它給出fatal error: y.tab.h: No such file or directory
。致命錯誤:y.tab.h:Fedora上沒有這樣的文件或目錄
相同的程序工作正常紅色帽子但不在fedora它運行在VMware。
請給出一些建議。
此程序是後綴修復程序的中綴。
lex程序:---->
%{
#include<string.h>
#include"y.tab.h"
FILE *fp,*yyin;
%}
%%
"*"|"/"|"+"|"-"|"("|")" {return yytext[0];}
[0-9]+ {yylval.name=(char*)malloc(yyleng+1);
strcpy(yylval.name,yytext);
return num;}
\n {return(0);}
[a-zA-Z][a-zA-Z]* {yylval.name=(char*)malloc(yyleng+1);
strcpy(yylval.name,yytext);
return ID;}
. {}
%%
int yywrap()
{
return 1;
}
yacc的程序:------->
%{
#include<stdio.h>
#include<string.h>
%}
%union
{
char *name;
}
%token<name>num ID
%type<name>E
%left'+''-'
%left'*''/'
%nonassoc UMINUS
%%
S:E{printf("\n%s",$1);}
;
E:E'*'E {strcpy($$,strcat(strcat($1,$3),"*"));}
|E'/'E {strcpy($$,strcat(strcat($1,$3),"/"));}
|E'+'E {strcpy($$,strcat(strcat($1,$3),"+"));}
|E'-'E {strcpy($$,strcat(strcat($1,$3),"-"));}
|ID
|num
|'-'E%prec UMINUS {strcpy($$,strcat($2,"UMINUS"));}
|'('E')'{strcpy($$,$2);}
;
%%
main()
{
yyparse();
}
int yyerror(char *s) {fprintf(stderr,"%s\n",s);}
我使用'yacc prog.y'編譯程序,它不會創建'y.tab.h'。 –
你需要寫** yacc -d prog.y **。 –
瞭解。它的工作 –