我正在尝试编译.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库中存在问题吗?如果是这样,我在哪里可以下载更新/固定的库? 否则,问题是什么?
答案 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文件,那么你正在尝试编译一个不完整的软件包,而这只是不起作用。你必须以某种方式从你已经拥有的文件中获取丢失的文件。