📄 scanner.l
字号:
FILE ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|("\""[^\n\"]+"\"")ID [a-z_A-Z][a-z_A-Z0-9]*LABELID [a-z_A-Z][a-z_A-Z0-9\-]*SCOPEID {ID}({ID}*{BN}*"::"{BN}*)*({ID}?)SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})ATTR ({B}+[^>\n]*)?A [aA]BR [bB][rR]PRE [pP][rR][eE]TABLE [tT][aA][bB][lL][eE]P [pP]UL [uU][lL]OL [oO][lL]DL [dD][lL]TITLE [tT][iI][tT][lL][eE]CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))%option noyywrap%x Define%x DefineArg%x DefineEnd%x CompoundName%x ClassVar%x ClassTemplSpec%x Bases%x BasesProt%x NextSemi%x BitFields%x FindMembers%x FindMemberName%x FindFields%x FindFieldArg%x Function%x FuncRound%x ExcpRound%x FuncQual%x Operator%x Array%x ReadBody%x Using%x UsingDirective%x NameSpaceDocArg1%x PackageDocArg1%x SkipCurly%x SkipCurlyCpp%x SkipCurlyEndDoc%x SkipString%x SkipInits%x SkipCPP%x SkipCPPBlock%x SkipComment%x SkipCxxComment%x SkipCurlyBlock%x SkipRoundBlock%x SkipCode%x Sharp%x SkipSharp%x SkipRound%x SkipSquare%x SkipSection%x IfGuard%x IfNotGuard%x TypedefName%x TryFunctionBlock%x TryFunctionBlockEnd%x Comment%x Doc%x JavaDoc%x ClassDoc%x LineDoc%x DefLineDoc%x ClassDocArg1%x ClassDocArg2%x ClassDocArg3%x ClassDocFunc%x ClassDocFuncPtr%x ClassDocFuncQual%x ClassDocFuncSkipLine%x ClassDocFuncExc%x ClassDocDefine%x ClassDocRelates%x ClassDocBrief%x ClassDocOverload%x ClassDefineArgs%x DocBaseClass%x CppQuote%x EndCppQuote%x GroupDocArg1%x GroupDocArg2%x GroupName%x GroupHeader%x StoreGroupDocs%x AfterDoc%x AfterDocBrief%x AfterDocLine%x PageDoc%x PageDocTitle%x PageDocArg1%x PageDocArg2%x FileDocArg1%x FileDocArg2%x ExampleDoc%x ExampleDocArg1%x EnumDocArg1%x FuncPtr%x EndFuncPtr%x FuncFunc%x FuncFuncEnd%x FuncFuncType%x MemberSpec%x MemberSpecSkip%x SkipVerbatim%x TodoParam%x TestParam%x BugParam%x SectionLabel%x SectionTitle%x SkipTemplate%x EndTemplate%x CopyArgString%x CopyArgRound%x CopyArgSharp%x CopyArgComment%x CopyArgCommentLine%x SkipUnionSwitch%x ReadFuncArgType%x ReadTempArgs%x Specialization%x SkipHtmlComment%x ReadFormulaShort%x ReadFormulaLong%x AnchorLabel%x ReadInitializer%x CopyString%x CopyRound%x CopyCurly%x IDLUnionCase%x NSAliasName%x NSAliasArg%x PackageName%x GetCallType%%<*>\x06[^\x06]*\x06 { // new file if (memberGroupId!=NOGROUP) { warn(yyFileName,yyLineNr,"Warning: Missing //@}"); memberGroupId=NOGROUP; } yyLineNr= 0 ; // there is always an extra newline at the start of the file int i; for( i = 0 ; yytext[i+1] != 6 ; i++ ) yyFileName[i] = yytext[i+1] ; yyFileName[i] = 0 ; setContext(); msg("Parsing file %s...\n",yyFileName); current_root = global_root ; initParser(); current->reset(); int sec=guessSection(yyFileName); if (sec) { current->name = yyFileName; current->section = sec; current_root->addSubEntry(current); current = new Entry; } BEGIN( FindMembers ); }<NextSemi>"{" { curlyCount=0; needsSemi = TRUE; BEGIN(SkipCurlyBlock); }<NextSemi>"(" { roundCount=0; BEGIN(SkipRoundBlock); }<SkipRoundBlock>"(" { ++roundCount; }<SkipRoundBlock>")" { if (roundCount ) --roundCount ; else BEGIN( NextSemi ) ; }<SkipCurlyBlock>"{" { ++curlyCount ; }<SkipCurlyBlock>"}" { if( curlyCount ) { --curlyCount ; } else if (needsSemi) { BEGIN( NextSemi ); } else { BEGIN( FindMembers ); } }<NextSemi>{CHARLIT} <NextSemi>\" { lastStringContext=NextSemi; BEGIN(SkipString); }<NextSemi>[;,] { unput(*yytext); BEGIN( FindMembers ); }<BitFields>[;,] { unput(*yytext); BEGIN( FindMembers ); }<FindMembers>{B}*("properties"|"__property"){BN}*":"{BN}* { // IDL or Borland C++ builder property current->mtype = mtype = Property; current->protection = protection = Public ; current->type.resize(0); current->name.resize(0); current->args.resize(0); current->argList->clear(); lineCount() ; }<FindMembers>{B}*"k_dcop"{BN}*":"{BN}* { current->mtype = mtype = DCOP; current->protection = protection = Public ; current->type.resize(0); current->name.resize(0); current->args.resize(0); current->argList->clear(); lineCount() ; }<FindMembers>{B}*"signals"{BN}*":"{BN}* { current->mtype = mtype = Signal; current->protection = protection = Public ; current->type.resize(0); current->name.resize(0); current->args.resize(0); current->argList->clear(); lineCount() ; }<FindMembers>{B}*"public"{BN}*"slots"{BN}*":"{BN}* { current->protection = protection = Public ; current->mtype = mtype = Slot; current->type.resize(0); current->name.resize(0); current->args.resize(0); current->argList->clear(); lineCount(); }<FindMembers>{B}*"protected"{BN}*"slots"{BN}*":"{BN}* { current->protection = protection = Protected ; current->mtype = mtype = Slot; current->type.resize(0); current->name.resize(0); current->args.resize(0); current->argList->clear(); lineCount(); }<FindMembers>{B}*"private"{BN}*"slots"{BN}*":"{BN}* { current->protection = protection = Private ; current->mtype = mtype = Slot; current->type.resize(0); current->name.resize(0); current->args.resize(0); current->argList->clear(); lineCount(); }<FindMembers>{B}*("public"|"methods"|"__published"){BN}*":"{BN}* { current->protection = protection = Public ; current->mtype = mtype = Method; current->type.resize(0); current->name.resize(0); current->args.resize(0); current->argList->clear(); lineCount() ; }<FindMembers>{B}*"protected"{BN}*":"{BN}* { current->protection = protection = Protected ; current->mtype = mtype = Method; current->type.resize(0); current->name.resize(0); current->args.resize(0); current->argList->clear(); lineCount() ; }<FindMembers>{B}*"private"{BN}*":"{BN}* { current->protection = protection = Private ; current->mtype = mtype = Method; current->type.resize(0); current->name.resize(0); current->args.resize(0); current->argList->clear(); lineCount() ; }<FindMembers>{BN}{1,80} { lineCount(); }<FindMembers>{B}*"package"{BN}+ { // Java package lineCount(); BEGIN(PackageName); }<PackageName>{ID}("."{ID})* { current->name = yytext; current->fileName = yyFileName; current->startLine = yyLineNr; current->section=Entry::PACKAGE_SEC; current_root->addSubEntry(current); current = new Entry ; initEntry(); }<PackageName>";" { BEGIN(FindMembers); }<FindMembers>{B}*"static"{BN}+ { //current->type += " static "; current->stat = TRUE; lineCount(); }<FindMembers>{B}*"extern"{BN}+ { current->stat = FALSE; current->explicitExternal = TRUE; lineCount(); }<FindMembers>{B}*"virtual"{BN}+ { current->type += " virtual "; current->virt = Virtual; lineCount(); }<FindMembers>{B}*"abstract"{BN}+ { current->type += " abstract "; current->virt = Pure; lineCount(); }<FindMembers>{B}*"inline"{BN}+ { current->memSpec|=Entry::Inline; lineCount(); }<FindMembers>{B}*"mutable"{BN}+ { current->memSpec|=Entry::Mutable; lineCount(); }<FindMembers>{B}*"explicit"{BN}+ { current->memSpec|=Entry::Explicit; lineCount(); } /*<FindMembers>{B}*"import"{BN}+ { // IDL import keyword BEGIN( NextSemi ); } */<FindMembers>{B}*"typename"{BN}+ { lineCount(); }<FindMembers>{B}*"namespace"{BN}*/[^a-z_A-Z0-9] { isTypedef=FALSE; current->section = Entry::NAMESPACE_SEC; current->type = "namespace" ; current->fileName = yyFileName; current->startLine = yyLineNr; current->bodyLine = yyLineNr; lineCount(); BEGIN( CompoundName ); }<FindMembers>{B}*"module"{BN}+ { isTypedef=FALSE; current->section = Entry::NAMESPACE_SEC; current->type = "module" ; current->fileName = yyFileName; current->startLine = yyLineNr; current->bodyLine = yyLineNr; lineCount(); BEGIN( CompoundName ); }<FindMembers>{B}*"library"{BN}+ { isTypedef=FALSE; current->section = Entry::NAMESPACE_SEC; current->type = "library" ; current->fileName = yyFileName; current->startLine = yyLineNr; current->bodyLine = yyLineNr; lineCount(); BEGIN( CompoundName ); }<FindMembers>{B}*((("disp")?"interface")|"valuetype"){BN}+ { // M$/Corba IDL interface isTypedef=FALSE; current->section = Entry::INTERFACE_SEC; addType( current ) ; current->type += " interface" ; current->fileName = yyFileName; current->startLine = yyLineNr; current->bodyLine = yyLineNr; lineCount(); BEGIN( CompoundName ); }<FindMembers>{B}*"exception"{BN}+ { // Corba IDL exception isTypedef=FALSE; current->section = Entry::EXCEPTION_SEC; addType( current ) ; current->type += " exception" ; current->fileName = yyFileName; current->startLine = yyLineNr; current->bodyLine = yyLineNr; lineCount(); BEGIN( CompoundName ); }<FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"class"{BN}+ { isTypedef=((QCString)yytext).find("typedef")!=-1; current->section = Entry::CLASS_SEC; addType( current ) ; current->type += " class" ; current->fileName = yyFileName; current->startLine = yyLineNr; current->bodyLine = yyLineNr; //if (current->mtArgList) // transfer template arguments //{ // if (current->tArgList) // { // delete current->tArgList; // } // current->tArgList = current->mtArgList; // current->mtArgList = 0; //} lineCount() ; BEGIN( CompoundName ) ; }<FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"struct{" | <FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"struct"/{BN}+ { isTypedef=((QCString)yytext).find("typedef")!=-1; current->section = Entry::STRUCT_SEC ; addType( current ) ; current->type += " struct" ; current->fileName = yyFileName; current->startLine = yyLineNr; current->bodyLine = yyLineNr; //if (current->mtArgList) // transfer template arguments //{ // if (current->tArgList) // { // delete current->tArgList; // } // current->tArgList = current->mtArgList;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -