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

时间:2014-03-09 14:42:50

标签: c++ lex flex-lexer

我是将我的课程附加到flex的搜索方式。如果我得到令牌,我需要数数。代码如下,其中stateMap - 其他类。 g ++无法使用“error:'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;
  ...
 }

1 个答案:

答案 0 :(得分:1)

对于这个特殊用例,我认为使statTable成为一个全局变量是合理的(在main函数之外声明,并在调用yylex()函数之前对其进行初始化:

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

 mapStat* statTable = NULL;

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

你应该考虑使用单例类来实现语义的更多封装和statisics功能的访问(这是一种罕见的有效用例)。