⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pre.l

📁 doxygen(一个自动从源代码生成文档的工具)的源代码
💻 L
📖 第 1 页 / 共 4 页
字号:
					      }					    }  					    //outputChar('\n');					    g_lastGuardName.resize(0);					    BEGIN(Start);					  }  					}<DefineArg>","{B}*			{ g_defArgsStr+=yytext; }<DefineArg>"("{B}*                      { g_defArgsStr+=yytext; }<DefineArg>{B}*")"{B}*			{                                          g_defArgsStr+=yytext; 					  QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr;					  outputArray(tmp.data(),tmp.length());					  g_quoteArg=FALSE;  					  BEGIN(DefineText);  					}<DefineArg>{ID}{B}*("..."?)		{  					  //printf("Define addArg(%s)\n",yytext);  					  QCString argName=yytext;  					  g_defVarArgs = yytext[yyleng-1]=='.';					  if (g_defVarArgs) // strip ellipsis					  {					    argName=argName.left(argName.length()-3);					  }					  argName = argName.stripWhiteSpace();                                          g_defArgsStr+=yytext;					  g_argDict->insert(argName,new int(g_defArgs)); 					  g_defArgs++;  					}<DefineText>"/*"			{  					  outputChar('/');outputChar('*');					  g_defText+=' ';					  g_defLitText+=' ';					  g_lastCContext=YY_START;  					  BEGIN(SkipCComment);  					}<DefineText>"//"			{  				          outputChar('/');outputChar('/');  					  g_lastCPPContext=YY_START;					  g_defLitText+=' ';  					  BEGIN(SkipCPPComment);  					}<SkipCComment>"*/"			{  					  outputChar('*');outputChar('/');  					  BEGIN(g_lastCContext);    					}<SkipCComment>"//"			{  					  outputChar('/');outputChar('/');  					}<SkipCComment>"/*"			{  					  outputChar('/');outputChar('*');  					}<SkipCComment>[^*\n]+			{  					  outputArray(yytext,yyleng);  					}<SkipCComment>\n			{   					  g_yyLineNr++;  					  outputChar('\n');  					}<SkipCComment>.				{  					  outputChar(*yytext);  					}<RemoveCComment>"*/"			{ BEGIN(g_lastCContext); }<RemoveCComment>"//"			<RemoveCComment>"/*"<RemoveCComment>[^*\n]+<RemoveCComment>\n			{ g_yyLineNr++; outputChar('\n'); }<RemoveCComment>.			<SkipCPPComment,RemoveCPPComment>\n	{  					  unput(*yytext);  					  BEGIN(g_lastCPPContext);  					}<SkipCPPComment>"/*"			{  					  outputChar('/');outputChar('*');  					}<SkipCPPComment>"//"			{  					  outputChar('/');outputChar('/');  					}<SkipCPPComment>[^\n]+			{  					  outputArray(yytext,yyleng);  					}<SkipCPPComment>.			{  					  outputChar(*yytext);  					}<RemoveCPPComment>"/*"<RemoveCPPComment>"//"<RemoveCPPComment>[^\n]+<RemoveCPPComment>.<DefineText>"#"				{  					  g_quoteArg=TRUE;					  g_defLitText+=yytext;  					}<DefineText>{ID}			{					  g_defLitText+=yytext;  					  if (g_quoteArg)					  {					    g_defText+="\"";					  }					  if (g_defArgs>0)					  {					    int *n;					    if ((n=(*g_argDict)[yytext]))					    {					      //if (!g_quoteArg) g_defText+=' ';					      g_defText+='@';					      QCString numStr;					      numStr.sprintf("%d",*n);					      g_defText+=numStr;					      //if (!g_quoteArg) g_defText+=' ';					    }					    else					    {					      g_defText+=yytext;					    }					  }					  else					  {					    g_defText+=yytext;					  }					  if (g_quoteArg)					  {					    g_defText+="\"";					  }					  g_quoteArg=FALSE;  					}<DefineText>\\[\r]?\n			{ 					  g_defLitText+=yytext;  					  outputChar('\n');  					  g_defText += ' '; g_yyLineNr++; 					}<DefineText>\n				{					  g_defLitText+=yytext;  					  outputChar('\n');  					  Define *def=0;					  //printf("Define name=`%s' text=`%s' litTexti=`%s'\n",g_defName.data(),g_defText.data(),g_defLitText.data());					  if (g_includeStack.isEmpty() || g_curlyCount>0) 					  {					    addDefine();					  }					  def=g_fileDefineDict->find(g_defName);					  if (def==0) // new define					  {					    //printf("new define!\n");					    g_fileDefineDict->insert(g_defName,newDefine());					  }					  else if (def)// name already exists					  {					    //printf("existing define!\n");					    //printf("define found\n");					    if (def->undef) // undefined name					    {					      def->undef = FALSE;					      def->name = g_defName;					      def->definition = g_defText.stripWhiteSpace();					      def->nargs = g_defArgs;					      def->fileName = g_yyFileName.copy(); 					      def->lineNr = g_yyLineNr;					    }					    else					    {					      //printf("Error: define %s is defined more than once!\n",g_defName.data());					    }					  }					  delete g_argDict; g_argDict=0;					  g_yyLineNr++;					  g_lastGuardName.resize(0);					  BEGIN(Start);  					}<DefineText>{B}*			{ g_defText += ' '; g_defLitText+=yytext; }<DefineText>{B}*"##"{B}*		{ g_defText += "##"; g_defLitText+=yytext; }<DefineText>"@"				{ g_defText += "@@"; g_defLitText+=yytext; }<DefineText>\"				{ g_defText += *yytext;   					  g_defLitText+=yytext; 					  BEGIN(SkipDoubleQuote);  					}<DefineText>\'				{ g_defText += *yytext;  					  g_defLitText+=yytext;   					  BEGIN(SkipSingleQuote);					}<SkipDoubleQuote>"//"			{ g_defText += yytext; g_defLitText+=yytext; }<SkipDoubleQuote>"/*"			{ g_defText += yytext; g_defLitText+=yytext; }<SkipDoubleQuote>\"			{  					  g_defText += *yytext; g_defLitText+=yytext; 					  BEGIN(DefineText);  					}<SkipSingleQuote,SkipDoubleQuote>\\.	{  					  g_defText += yytext; g_defLitText+=yytext;					}<SkipSingleQuote>\'			{  					  g_defText += *yytext; g_defLitText+=yytext;					  BEGIN(DefineText);  					}<SkipDoubleQuote>.			{ g_defText += *yytext; g_defLitText+=yytext; }<SkipSingleQuote>.			{ g_defText += *yytext; g_defLitText+=yytext; }<DefineText>.				{ g_defText += *yytext; g_defLitText+=yytext; }<<EOF>>					{                                          //printf("End of include file\n");					  //printf("Include stack depth=%d\n",g_includeStack.count());  					  if (g_includeStack.isEmpty())					  {					    //printf("Terminating scanner!\n");					    yyterminate();					  }					  else					  {					    FileState *fs=g_includeStack.pop();					    //fileDefineCache->merge(g_yyFileName,fs->fileName);					    if (Config_getString("INPUT_FILTER").isEmpty())					      fclose(fs->filePtr);					    else					      pclose(fs->filePtr);					    YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER;					    yy_switch_to_buffer( fs->bufState );					    yy_delete_buffer( oldBuf );					    g_yyLineNr=fs->lineNr;					    setFileName(fs->fileName.copy());					    //printf("######## FileName %s\n",g_yyFileName.data());					                                                // TODO: Enable this to deal with file changes due to                                             // #include's within { .. } blocks                                            //QCString lineStr;                                            //lineStr.sprintf("# %d \"%s\" 2",g_yyLineNr,g_yyFileName.data());                                            //outputArray(lineStr.data(),lineStr.length());					    					    delete fs; fs=0;					    					  }  					}<*>"/*"					{					  outputChar('/');outputChar('*');  					  g_lastCContext=YY_START;					  BEGIN(SkipCComment);  					}<*>"//"					{					  outputChar('/');outputChar('/');  					  g_lastCPPContext=YY_START;					  BEGIN(SkipCPPComment);					}<*>\n					{   					  outputChar('\n');  					  g_yyLineNr++; 					}<*>.				        {  					  outputChar(*yytext);  					}%%/*@ ---------------------------------------------------------------------------- */static int getNextChar(const QCString &expr,QCString *rest,uint &pos){  //printf("getNextChar(%s,%s,%d)\n",expr.data(),rest ? rest->data() : 0,pos);  if (pos<expr.length())  {    //printf("%c=expr()\n",expr.at(pos));    return expr.at(pos++);  }  else if (rest && !rest->isEmpty())  {    int cc=rest->at(0);    *rest=rest->right(rest->length()-1);    //printf("%c=rest\n",cc);    return cc;  }  else  {    int cc=yyinput();    //printf("%c=yyinput()\n",cc);    return cc;  }} static int getCurrentChar(const QCString &expr,QCString *rest,uint pos){  //printf("getCurrentChar(%s,%s,%d)\n",expr.data(),rest ? rest->data() : 0,pos);  if (pos<expr.length())  {    //printf("%c=expr()\n",expr.at(pos));    return expr.at(pos);  }  else if (rest && !rest->isEmpty())  {    int cc=rest->at(0);    //printf("%c=rest\n",cc);    return cc;  }  else  {    int cc=yyinput();unput(cc);    //printf("%c=yyinput()\n",cc);    return cc;  }}static void unputChar(const QCString &expr,QCString *rest,uint &pos,char c){  //printf("unputChar(%s,%s,%d,%c)\n",expr.data(),rest ? rest->data() : 0,pos,c);  if (pos<expr.length())  {    pos++;  }  else if (rest)  {    //printf("Prepending to rest!\n");    char cs[2];cs[0]=c;cs[1]='\0';    rest->prepend(cs);  }  else  {    unput(c);  }  //printf("result: unputChar(%s,%s,%d,%c)\n",expr.data(),rest ? rest->data() : 0,pos,c);}void addSearchDir(const char *dir){  QFileInfo fi(dir);  if (fi.isDir()) g_pathList->append(fi.absFilePath());} void initPreprocessor(){  g_pathList = new QStrList;  addSearchDir(".");  //defineNameList.setAutoDelete(TRUE);  //defineNameList.clear();  //defineDict.clear();  //fileDefineCache = new DefineCache(1009);  g_expandedDict = new DefineDict(17);  g_fileDefineDict = new DefineDict(1009);}void cleanupPreprocessor(){  //delete fileDefineCache;  delete g_fileDefineDict; g_fileDefineDict=0;  delete g_expandedDict; g_expandedDict=0;  delete g_pathList; g_pathList=0;}void preprocessFile(const char *fileName,BufStr &output){  uint orgOffset=output.curPos();  g_macroExpansion = Config_getBool("MACRO_EXPANSION");  g_expandOnlyPredef = Config_getBool("EXPAND_ONLY_PREDEF");  g_curlyCount=0;  g_nospaces=FALSE;  g_outputBuf=&output;  g_includeStack.setAutoDelete(TRUE);  g_includeStack.clear();  g_fileDefineDict->setAutoDelete(TRUE);  g_fileDefineDict->clear();  g_expandedDict->setAutoDelete(FALSE);  g_expandedDict->clear();    // add predefined macros  char *defStr = Config_getList("PREDEFINED").first();  while (defStr)  {    //printf("Predefined: `%s'\n",defStr);    QCString ds = defStr;    int i_equals=ds.find('=');    int i_obrace=ds.find('(');    int i_cbrace=ds.find(')');    bool nonRecursive = i_equals>0 && ds.at(i_equals-1)==':';        if (i_obrace==0) continue; // no define name        if (i_obrace<i_equals && i_cbrace<i_equals && 	i_obrace!=-1      && i_cbrace!=-1      && 	i_obrace<i_cbrace       ) // predefined function macro definition    {      QRegExp reId("[a-z_A-Z][a-z_A-Z0-9]*"); // regexp matching an id      QDict<int> argDict(17);      argDict.setAutoDelete(TRUE);      int i=i_obrace+1,p,l,count=0;      // gather the formal arguments in a dictionary       while (i<i_cbrace && (p=reId.match(ds,i,&l)))      {        argDict.insert(ds.mid(p,l),new int(count++));	i=p+l;      }      // strip definition part      QCString tmp=ds.right(ds.length()-i_equals-1);      QCString definition;      i=0;      // substitute all occurrences of formal arguments by their       // corresponding markers      while ((p=reId.match(tmp,i,&l))!=-1)      {        if (p>i) definition+=tmp.mid(i,p-i);	int *argIndex;	if ((argIndex=argDict[tmp.mid(p,l)])!=0)	{	  QCString marker;	  marker.sprintf(" @%d ",*argIndex);	  definition+=marker;	}	else	{	  definition+=tmp.mid(p,l);	}	i=p+l;      }      if (i<(int)tmp.length()) definition+=tmp.mid(i,tmp.length()-i);            // add define definition to the dictionary of defines for this file      Define *def = new Define;      def->name = ds.left(i_obrace);      def->definition = definition;       def->nargs = count;      def->isPredefined = TRUE;      def->nonRecursive = nonRecursive;      g_fileDefineDict->insert(def->name,def);      //printf("#define `%s' `%s' #nargs=%d\n",      //  def->name.data(),def->definition.data(),def->nargs);    }    else if ((i_obrace==-1 || i_obrace>i_equals) &&	     (i_cbrace==-1 || i_cbrace>i_equals) &&	     !ds.isEmpty() && (int)ds.length()>i_equals	    ) // predefined non-function macro definition    {      Define *def = new Define;      if (i_equals==-1) // simple define without argument      {        def->name = ds;        def->definition = "1"; // substitute occurrences by 1 (true)      }      else // simple define with argument      {	int ine=i_equals - (nonRecursive ? 1 : 0);	def->name = ds.left(ine);	def->definition = ds.right(ds.length()-i_equals-1);      }      def->nargs = -1;      def->isPredefined = TRUE;      def->nonRecursive = nonRecursive;      g_fileDefineDict->insert(def->name,def);      //printf("#define `%s' `%s' #nargs=%d\n",      //  def->name.data(),def->definition.data(),def->nargs);    }        defStr=Config_getList("PREDEFINED").next();  }   QCString &inputFilter = Config_getString("INPUT_FILTER");  if (inputFilter.isEmpty())  {    preYYin = fopen(fileName,"r");    if (!preYYin)    {      err("Error: could not open file %s\n",fileName);      return;    }  }  else  {    QCString cmd = inputFilter+" "+fileName;    preYYin = popen(cmd,"r");    if (!preYYin)    {      err("Error: could not execute filter %s\n",cmd.data());      return;    }  }  g_yyLineNr = 1;  g_level    = 0;  g_ifcount  = 0;  setFileName(fileName);  BEGIN( Start );    g_lastGuardName.resize(0);  g_guardExpr.resize(0);    preYYlex();  if (inputFilter.isEmpty())    fclose(preYYin);  else    pclose(preYYin);    if (Debug::isFlagSet(Debug::Preprocessor))  {    char *orgPos=output.data()+orgOffset;    char *newPos=output.data()+output.curPos();    msg("Preprocessor output (size: %d bytes):\n",newPos-orgPos);    int line=1;    msg("---------\n00001 ");    while (orgPos<newPos)     {      putchar(*orgPos);      if (*orgPos=='\n') printf("%05d ",++line);      orgPos++;    }    msg("\n---------\n");  }}extern "C" { // some bogus code to keep the compiler happy//  int  preYYwrap() { return 1 ; }  void preYYdummy() { yy_flex_realloc(0,0); } }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -