致命错误:y.tab.h:fedora上没有这样的文件或目录

AJ.*_*AJ. 5 yacc lex fedora

我在VMware Workstation上运行我的fedora.我有一个lex和yacc程序.程序编译工作正常但是当我通过gcc y.tab.c lex.yy.c -ll它运行程序时给出fatal error: y.tab.h: No such file or directory.

相同的程序可以正常使用红帽,但不适用于在VMware上运行的fedora.

请提出一些建议.

这个程序是一个后缀修复程序.

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;
}
Run Code Online (Sandbox Code Playgroud)

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);}
Run Code Online (Sandbox Code Playgroud)

Tho*_*thy 8

这可能是您用来调用Yacc,Lex和GCC的命令的问题,而不是您在此处包含的输入文件.

YACC(这可能真的是一个节目叫野牛,即使你使用命令YACC)生成两个文件:一个解析器(y.tab.c的)和其他文件(y.tab.h)与定义的扫描需求.这里的问题是GCC找不到该文件,y.tab.h.

检查以下事项:

该文件实际生成.您可能必须将标志-d给Bison/Yacc.

该文件被称为y.tab.h.根据程序版本,名称可能会有所不同,如果您使用命令bison或命令yacc启动Bison .

该文件位于GCC可以找到它的目录中.

  • 你需要写**yacc -d prog.y**. (3认同)