我在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)
这可能是您用来调用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可以找到它的目录中.
| 归档时间: |
|
| 查看次数: |
18519 次 |
| 最近记录: |