2012-02-24 3 views
0

次のlex.lファイルがあります。補助関数を使用してC++で以下のflexファイルをコンパイルするには

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

#define AND 1 
#define BEGINN 2 

&} 

/* regular definitions */ 
ws  [ \t\n]+ 
letter [A-Za-z] 
/* more declarations */ 

%% 

{ws} 
{id}  {yylval = (int) storeLexeme(); return(ID);} 
{num}  {yylval = (int) storeInt(); return(NUM);} 
/* more rules */ 
%% 

int storeLexeme() { 
/* function implementation */ 
} 

int storeInt() { 
/* function implementation */ 
} 

このファイルをflexで実行すると、gccでコンパイルされますが、g ++で次のエラーが報告されます。

lex.l:110: error: `storeLexeme' undeclared (first use this function) 
lex.l:110: error: (Each undeclared identifier is reported only once for each function 
it appears in.) 
lex.l:111: error: `storeInt' undeclared (first use this function) 
lex.l: In function `int storeLexeme()': 
lex.l:117: error: `int storeLexeme()' used prior to declaration 
lex.l: In function `int storeInt()': 
lex.l:121: error: `int storeInt()' used prior to declaration 

これらのエラーを解決するにはどうすればよいですか?

答えて

1

最初に宣言する必要があります。あなただけ(彼らはヘッダで宣言されていない場合は、おそらくそうである)、1つのファイルにこれらの機能が必要な場合、あなたはおそらく、彼らにstaticを宣言する必要があり、また

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

#define AND 1 
#define BEGINN 2 

int storeLexeme(void); 
int storeInt(void); 
%} 

、または:最初のセクションを変更あなたがC++を使っているならば、匿名の名前空間で。

関連する問題