我正在尝试使用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");
}
答案 0 :(得分:0)
以下是我的错误:
变量mostRecentToken在main函数中声明。 它也用在Flex Scripts中,但Flex不知道主函数中声明的任何变量。
我用yytext和voila替换了脚本中的mostRecentToken。
再次感谢大家:)