'Pre-mature EOF'和'Bad Character'错误

时间:2014-09-01 19:50:23

标签: c++ flex-lexer

我在之前的课程中编写了Flex的东西,但我以前工作的代码都没有解决我遇到的问题。

我在StackOverflow周围搜索了一个解决方案,但没有一个解决过它。

我有:

  • 已检查%{...%}区域中没有错误空格
  • 尝试使用#include<'iostream>
  • 尝试%选项noyywrap

这是我的代码(我删除了所有令牌,因为它们有很多):

%{

...

int numLines = 0;

void printTokenInfo(char* tokenType, char* lexeme);

void handleComments(char* text);

%}

WSPACE  [ \t\r]+
NEWLINE \n
DIGIT [0-9]
LETTER [a-zA-Z]
IDENT ({LETTER}|_)({LETTER}|{DIGIT}|_)* 
INTCONST {DIGIT}+
CHARCONST "'"{LETTER}+"'"

%%

... 

%%

// User-written code goes here
void printTokenInfo(char* tokenType, char* lexeme) 
{
    printf("A");
    printf("TOKEN: %s LEXEME: %s\n", tokenType, lexeme);
}

void handleComments(char* text) 
{
    printf("%s\n", text);
}

int yywrap() { return 1; }

int main() 
{
    do {
        yylex();
    } while (!feof(yyin));
    return 0;
}

以下是我编译和运行它的方法:

flex FILENAME.l
g++ lex.yy.c -o lexer
lexer < INPUT.txt

教师向我们提供了输入文件,但没有一个有效。他们都因“过早的EOF”或“坏人”而失败

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

好吧,我想我终于找到了答案......尝试使用完整路径运行它,而不仅仅是编译词法分析器的名称。我发现了真实的&#39;在gdb下运行它的路径(这无疑应该是我的第一直觉)。

gdb lexer
(gdb) run < INPUT.txt

最初,我试图用以下方式运行它:

lexer < INPUT.txt

但是我发现用gdb运行它有效:

/nethome/users/mjc7w6/Classes/lexer < INPUT.txt

编辑:有人在我的Facebook上进一步改进。如果上述解决方案为您修复了,您可能需要使用以下内容编辑〜/ .bashrc:

export PATH=/nethome/users/mjc7w6/Classes:$PATH

或者你找到了要设置的路径。