Flex编译文件(lex.yy.c)无法找到标头/依赖项并且编译奇怪

时间:2011-12-10 10:38:41

标签: c++ c compilation header flex-lexer

我正在尝试使用Flex编译一个小型词法分析器应用程序。 确实生成了lex.yy.c文件,但是当我将它添加到Visual Studio中的项目时, 它产生了数十个错误,声称不能识别我定义的结构和功能 一个相关的标题。

此标题在我发送给Flex的文件中为#include。

此外,当我尝试解决这些错误时,似乎有些错误的起源就在于 我用来生成lex.yy.c的Flex Scripts txt文件或者与我的项目无关的其他文件,如flexskel.cc

为什么要尝试编译非相关文件? 我正在使用Windows 7和Visual Studio 10。

以下是我发送给Flex的文件的简短版本:

%{
#include <stdio.h>
#include "TokenInterface.h"
int lineCounter = 0;
%}
DIGIT   [0-9]
LETTER [a-zA-Z] 
%%
"START_PROG" 
{
storeTokenInList(yytext, lineCounter, START_PROG);
fprintf(yyout,"\nSTART_PROG: %s\n",mostRecentToken->lexema);
return;
}                                                               
"END_PROG"          
{
storeTokenInList(yytext, lineCounter, END_PROG);
fprintf(yyout,"\nEND_PROG: %s\n",mostRecentToken->lexema);
return;
 }                                                           %%     

void main(int argc, char* argv[])
{
token* mostRecentToken;
createEmptyTokenList();
yyin = fopen("c:\\Flex\\input.txt","r");
yyout = fopen("c:\\Flex\\output.txt","w");
yylex();
mostRecentToken = backToken();

while (mostRecentToken->tokenType != EOF)
{
    yylex();
    mostRecentToken = backToken();
}
printf("Flex Out.\n");
}

1 个答案:

答案 0 :(得分:0)

以下是我的错误:

变量mostRecentToken在main函数中声明。 它也用在Flex Scripts中,但Flex不知道主函数中声明的任何变量。

我用yytext和voila替换了脚本中的mostRecentToken。

再次感谢大家:)