2014-09-01 80 views
0

我已经写了Flex的东西在以前的类,但没有我以前的工作代码是解决我遇到的问题。'早熟EOF'和'坏字符'错误

我已经在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

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

或者然而你会发现道路被设置。