2014-09-01 70 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 

或者然而你會發現道路被設置。