2015-04-18 76 views
3

我正在寫一個使用flex的程序,它從文本文件獲取輸入並將它們分成標識符,關鍵字,運算符等一些標記。我的文件名是test.l.我做了另一個哈希表程序,其中包含一個名爲SymbolTable.h的文件。有沒有辦法在我的test.l文件中包含這個頭文件,這樣我可以在讀取輸入的同時進行一些操作(例如:將標識符插入到哈希表中)?我已經嘗試包括,但是當我嘗試使用gcc lex.yy.c -lfl編譯,它會產生一個錯誤消息說:在Flex中包含一個外部頭文件

"fatal error: SymbolTable.h: No such file or directory."

請幫我如何包含頭文件或者以其他任何方式我可以做想要的我上面說過的操作。

+0

你說你的頭文件是'SymbolTable.h',後來錯誤顯示爲'SymbolInfo.h'。這聽起來像你把錯誤的文件名。如果您在答案中包含更多詳細信息,包括頭文件包含的'test.l'文件的摘錄,這將非常有用。 – rici

+0

對不起,編輯。那是我錯誤鍵入的另一個文件名。現在請檢查文章@rici – SKB

+0

我一直在我的詞法分析器中包含頭文件,從它們使用已聲明的結構從來都不是問題...您確定像rici建議的那樣,它不是路徑問題嗎? –

回答

1

對於簡單的應用程序,您可以使用我的bison/yacc項目的一個小模板。

gram.y裏

%{ 
#include <stdio.h> 
#include <stdlib.h> 

%} 
// tokens here 


%% 
// rules here 


%% 

int main() { 
    return yyparse(); 
} 

scan.l裏:

%{ 
#include <stdio.h> 

//include a YACC grammar header 
//#include "gram.h" 
%} 
%% 
. /*LEX RULES*/; 

%% 
// C code 
int yywrap() { 
    return 1; 
} 

生成文件:

all: gram 

gram: gram.c gram.h scan.c 
    gcc gram.c scan.c -lfl -ly -o gram 
gram.c: gram.y 
    yacc -d gram.y -o gram.c 
scan.c: scan.l 
    flex -o scan.c scan.l 

scan: scan.c 
    gcc scan.c -lfl -o scan 

掃描器使用在該例子中從野牛生成的頭文件。但是,你肯定可以在同一個地方包含一些其他的頭文件。

要編譯您的詞法分析器,只需鍵入make scanmake即可同時編譯詞法和語法。

在您的詞法分析器旅程中祝您好運!

1

您的包含聲明工作得很好。編譯器找不到您的文件,因爲它不在包含搜索路徑中。嘗試添加-I。當調用gcc時。像:gcc -I。