如何使用辅助函数在C ++中编译以下flex文件

时间:2012-02-24 04:34:16

标签: c++ g++ flex-lexer

我有以下lex.l文件。

 %{
 #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 个答案:

答案 0 :(得分:1)

你必须先申报。更改第一部分:

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

#define AND 1
#define BEGINN 2

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

另外,如果你只需要在那个文件中使用这些函数(如果它们没有在标题中声明的话可能就是这种情况),你可能应该声明它们static,或者在匿名命名空间中你正在使用C ++。