C++ 在lex规则部分使用自己的类
我正在寻找将我的类附加到flex的方法。如果我拿到代币,我需要数一数。下面的代码,其中stateMap-other类。g++无法编译此文件,因为“错误:此范围中未声明“statTable”。 没有野牛我怎么能做到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]!=' ')
%{
#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;
// ...
}