C++ 在lex规则部分使用自己的类

C++ 在lex规则部分使用自己的类,c++,lex,flex-lexer,C++,Lex,Flex Lexer,我正在寻找将我的类附加到flex的方法。如果我拿到代币,我需要数一数。下面的代码,其中stateMap-other类。g++无法编译此文件,因为“错误:此范围中未声明“statTable”。 没有野牛我怎么能做到 %{ #include "mapstat.h" ... }% %% {some pattern} { int i=0,key,count; while(yytext[i]!=' ')

我正在寻找将我的类附加到flex的方法。如果我拿到代币,我需要数一数。下面的代码,其中stateMap-other类。g++无法编译此文件,因为“错误:此范围中未声明“statTable”。 没有野牛我怎么能做到

%{
#include "mapstat.h"
...
}%
%%
{some pattern}     {    
                      int i=0,key,count;
                      while(yytext[i]!=' '){
                         lineNumber[i]=yytext[i];
                         ++i;
                      }
                      lineNumber[i]=0;
                      key=atoi(lineNumber);
                      count=statTable->find(key);
                   }
%%
int main(int argc, char *argv[]) {
       mapStat *statTable=new mapStat;
  ...
 }

对于这个特定的用例,我认为将
statTable
设置为全局变量是合理的(在main函数之外声明,并在调用
yylex()
函数之前初始化它:

 %{
     #include "mapstat.h"
     extern mapStat* statTable;
     // ...
 }%


您应该考虑使用一个Stutelon类来实现更多的语义和访问统计功能的封装(这是一个罕见的有效用例)。

是的,但是如果STATABLE与FlexLexer是类的,那就更好了。我试着将YyFraceLover用STATABLE封装到我自己的类中,但是YLYEXE()仍然看不到这个状态表。谢谢。
 mapStat* statTable = NULL;

 int main(int argc, char *argv[]) {
     statTable=new mapStat;
     // ...
 }