创建词法分析器时缺少.h文件

时间:2013-02-03 14:38:15

标签: c gcc lex flex-lexer

我正在尝试编译.l文件来创建词法分析器。代码是:

%{
#include "ifanw.tab.h"
extern int yylval;
%}
%%
"="      { return EQ; }
"!="     { return NE; }
"<"      { return LT; }
"<="     { return LE; }
">"      { return GT; }
">="     { return GE; }
"+"      { return PLUS; }
"-"      { return MINUS; }
"*"      { return MULT; }
"/"      { return DIVIDE; }
")"      { return RPAREN; }
"("      { return LPAREN; }
":="     { return ASSIGN; }
";"      { return SEMICOLON; }
"IF"     { return IF; }
"THEN"   { return THEN; }
"ELSE"   { return ELSE; }
"FI"     { return FI; }
"WHILE"  { return WHILE; }
"DO"     { return DO; }
"OD"     { return OD; }
"PRINT"  { return PRINT; }
[0-9]+   { yylval = atoi(yytext); return NUMBER; }
[a-z]    { yylval = yytext[0] - 'a'; return NAME; }   
\        { ; }
\n       { nextline(); }
\t       { ; }
"//".*\n { nextline(); }
.        { yyerror("illegal token"); }
%%

我输入的命令是:

flex filename.l 

gcc -c lex.yy.c -o out

输出

filename.l:2:23: fatal error: ifanw.tab.h: no such file or directory.

gcc库中存在问题吗?如果是这样,我在哪里可以下载更新/固定的库? 否则,问题是什么?

2 个答案:

答案 0 :(得分:0)

将flex库添加到gcc命令:

gcc -c lex.yy.c -lfl -o out

另外,如果您要包含tab.h文件,那么您是否有任何野牛文件?如果是,您是否使用bison命令进行编译?

这个名称是一个bison生成的标题,所以你应该有一个.y扩展名的文件,你需要用bison命令编译:{{1​​}}

在使用bison *.y进行编译后,再次执行命令,但请记住添加flex库标志(bison)。

答案 1 :(得分:0)

gcc告诉您问题所在:找不到您指定的包含文件。

这不是图书馆的问题。

您需要先从.y文件创建该文件

bison --debug --verbose -d ifanw.y

您可能会发现this small tutorial有用。

如果你没有.y文件,那么你正在尝试编译一个不完整的软件包,而这只是不起作用。你必须以某种方式从你已经拥有的文件中获取丢失的文件。