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

'Pre-mature EOF' and 'Bad Character' errors

本文关键字:Character 错误 Bad EOF Pre-mature      更新时间:2023-10-16

我在以前的类中写过Flex的东西,但我以前工作的代码都没有解决我遇到的问题。

我在StackOverflow周围搜索了一个解决方案,但他们都没有解决

我有:

  • 选中我在%{…%}区域中没有错误的空格
  • 尝试使用#include<'iostream>
  • 已尝试%选项noywrap

这是我的代码(我删除了所有的代币,因为有很多):

%{
...
int numLines = 0;
void printTokenInfo(char* tokenType, char* lexeme);
void handleComments(char* text);
%}
WSPACE  [ tr]+
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: %sn", tokenType, lexeme);
}
void handleComments(char* text) 
{
    printf("%sn", 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"或"不良字符"而失败

有什么想法吗?

好吧,我想我终于找到了答案。。。试着使用完整的路径运行它,而不仅仅是使用编译的lexer的名称。我通过在gdb下运行它发现了"实际"路径(诚然,这应该是我的第一直觉)。

gdb lexer
(gdb) run < INPUT.txt

最初,我试图用运行它

lexer < INPUT.txt

但我通过用gdb运行它发现这是有效的:

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

编辑:有人在我的脸书上插话说我有了进一步的改进。如果上面的解决方案为您修复了它,您可能需要用以下内容编辑您的~/.bashrc:

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

或者,不管你发现这条路是怎么走的。