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

C 创建词法分析器时缺少.h文件,c,gcc,lex,flex-lexer,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; } "+" { retur

我试图编译一个.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"); }
%%
输出是

filename.l:2:23: fatal error: ifanw.tab.h: no such file or directory.
gcc库中的问题是什么?如果是,我在哪里可以下载更新/修复的库?
否则,会出现什么问题?

将flex库添加到gcc命令中:

gcc -c lex.yy.c -lfl -o out
另外,如果您包含一个
tab.h
文件,您有野牛文件吗?如果是这样,您是否使用
bison
命令编译它


根据名称,这是bison生成的头文件,因此您应该有一个扩展名为
.y
的文件,您需要使用bison命令编译该文件:
bison*.y


使用
bison
编译后,再次执行命令,但请记住添加flex库标志(
-lfl
)。

gcc
告诉您问题是:它找不到指定的include文件

这不是图书馆的问题

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

bison --debug --verbose -d ifanw.y
你可能会觉得有用


如果您没有.y文件,那么您正试图编译一个不完整的包,这是行不通的。您必须以某种方式从您已经拥有的文件中获取丢失的文件。

将来;一定要小心标记。Flex用于Adobe/ApacheUI框架。Lex和/或gnu flex用于词法分析器。此命令具有相同的输出。我尝试使用命令gcc-lfl,输出为'usr/lib/i386 linux gnu/libfl_pic.a(libfl_pic_a-libmain.o):在函数
main':/build/buildd/flex-2.5.35/libmain.c:30:未定义对
yylex'collect2:ld返回1退出状态的引用“您是否有一个名为
ifanw.tab.h
”的文件名为bison生成的头,因此您应该有一个扩展名为
.yy
.y
的文件,您需要使用
bison
命令:
bison*.yy*.y
你的意思是什么?我不知道gcc图书馆在哪里。朋友,你在抱怨你的门没有打开,显示的错误是“锁里没有钥匙”。你怎么能指望别人想出你的代码呢?哦,那没关系。看看那个教程,它会告诉你.y文件应该是什么样子。如果你是初学者,我建议你首先阅读一些关于语法的理论,特别是lex/yacc。否则,如果您正试图用解析器解决另一个问题,那么最好就问题本身征求意见。有人可能会建议最实用的语法方法。除了-d之外,bison的所有选项都是多余的imho。是的@fuzzxl,它们是为了生成输出。但是如果OP需要一些关于.y文件本身的反馈,它们可能会派上用场。@lserni IMHO它们只是把make的输出弄得乱七八糟。我更喜欢在需要时临时添加这些选项,以保持make的输出简短。
bison --debug --verbose -d ifanw.y