c++ - “过早的 EOF”和 'Bad Character' 错误

标签 c++ flex-lexer

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

我在 StackOverflow 上搜索了一个解决方案,但没有一个能解决它。

我有:

  • 已检查我在 %{ ... %} 区域没有错误的空格
  • 尝试使用#include <'iostream>
  • 尝试了 %option 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”或“坏字符”而失败

有什么想法吗?

最佳答案

好吧,我想我终于找到了答案...尝试使用完整路径运行它,而不仅仅是编译的词法分析器的名称。我通过在 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

或者您发现要设置的路径。

关于c++ - “过早的 EOF”和 'Bad Character' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25612189/

相关文章:

c++ - Bison 解析器 : making a function which is returning tokens

检查 flex 中未完成的评论

regex - 匹配空输入的 flex 脚本?

C++ XOR字符串键十六进制

c++ - 条件运算符问题

c++ - 如何在一种日志机制中捕获特定方法的调用

c - 弹性/Bison : segmentation fault core dump

c++ - 基于 Flex/Bison 的编译器——二进制生成

c++ - std::multimap 和 equal_range

c++ - 在同一行读取字符串和整数