13%option never-interactive
14%option prefix="lexscannerYY"
16%option extra-type="struct lexscannerYY_state *"
22#define YY_TYPEDEF_YY_SCANNER_T
51#define YY_NO_UNISTD_H 1
53#define repeatChar(chr, cnt) QCString().fill(chr,cnt)
99#define YY_INPUT(buf,result,max_size) result=yyread(yyscanner,buf,max_size);
102static inline const char *
getLexerFILE() {
return __FILE__;}
C-like language parser using state-based lexical scanning.
Clang parser object for a single translation unit, which consists of a source file and the directly o...
This is an alternative implementation of QCString.
static int yyread(yyscan_t yyscanner, char *buf, int max_size)
static const char * stateToString(int state)
static const char * getLexerFILE()
static void handleCCode(yyscan_t yyscanner)
int lastPreLineCtrlContext
ClangTUParser * clangParser
std::shared_ptr< Entry > current
std::shared_ptr< Entry > current_root
COutlineParser cOutlineParser
A bunch of utility functions.
117RulesSharp "<"[^>\n]*">"
118RulesCurly "{"[^{}\n]*"}"
123EscapeRulesCharOpen "\\["|"\<"|"\\{"|"\\("|"\\\""|"\\ "|"\\\\"
124EscapeRulesCharClose "\\]"|"\>"|"\\}"|"\\)"
125EscapeRulesChar {EscapeRulesCharOpen}|{EscapeRulesCharClose}
132ID [$a-z_A-Z\x80-\xFF][$a-z_A-Z0-9\x80-\xFF]*
135RAWBEGIN (u|U|L|u8)?R\"[^ \t\(\)\\]{0,16}"("
136RAWEND ")"[^ \t\(\)\\]{0,16}\"
137CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
148DCOMM ("/\*!"|"/\**"|"/\/!"|"/\/\/")
189<DefSection>{Option} {
192<Option>"prefix"{ws}*"="{ws}* {
195<OptPrefix>"\""[^\"]*"\"" {
196 yyextra->prefix = yytext;
197 yyextra->prefix = yyextra->prefix.mid(1,yyleng-2);
201 yyextra-> reentrant =
true;
203<Option>"bison-bridge" {
204 yyextra-> bison_bridge =
true;
206<Option>"bison-locations" {
207 yyextra-> bison_bridge =
true;
208 yyextra-> bison_locations =
true;
213 yyextra->cCodeBuffer += yytext;
216<DefSection>^{RulesStart} {
219 yyextra->cCodeBuffer +=
"int " + yyextra->prefix +
"lex (";
220 if (yyextra->bison_bridge )
222 if (fill) yyextra->cCodeBuffer +=
",";
223 yyextra->cCodeBuffer +=
"YYSTYPE * yylval_param";
226 if (yyextra->bison_locations)
228 if (fill) yyextra->cCodeBuffer +=
",";
229 yyextra->cCodeBuffer +=
"YYLTYPE * yylloc_param";
232 if (yyextra->reentrant)
234 if (fill) yyextra->cCodeBuffer +=
",";
235 yyextra->cCodeBuffer +=
"yyscan_t yyscanner";
238 if (!yyextra->bison_bridge && !yyextra->bison_locations && !yyextra->reentrant)
240 yyextra->cCodeBuffer +=
"void";
242 yyextra->cCodeBuffer +=
") {\n";
244 BEGIN (RulesSectionInit);
246<DefSection>^{TopStart} {
247 yyextra->cCodeBuffer +=
"\n";
248 yyextra->lastContext = YY_START;
251<DefSection>^{LiteralStart} {
252 yyextra->cCodeBuffer +=
"\n";
253 yyextra->lastContext = YY_START;
254 BEGIN (LiteralSection);
256<TopSection>^{TopEnd} {
257 yyextra->cCodeBuffer +=
"\n";
258 BEGIN( yyextra->lastContext ) ;
261 yyextra->cCodeBuffer += yytext;
263<LiteralSection>^{LiteralEnd} {
264 yyextra->cCodeBuffer +=
"\n";
265 BEGIN( yyextra->lastContext ) ;
267<LiteralSection>.*{nl} {
268 yyextra->cCodeBuffer += yytext;
271 BEGIN(DefSectionLine);
273<DefSection>{CPPC}.*{nl} {
274 yyextra->cCodeBuffer += yytext;
276<DefSection>^{ws}*{CCS} {
277 yyextra->cCodeBuffer += yytext;
278 yyextra->lastContext = YY_START;
281<COMMENT>{CCE}{ws}*{nl} {
282 yyextra->cCodeBuffer+=yytext;
283 BEGIN(yyextra->lastContext);
286 yyextra->cCodeBuffer+=yytext;
287 BEGIN(yyextra->lastContext);
290 yyextra->cCodeBuffer += yytext;
292<COMMENT>{CPPC}|{CCS} {
293 yyextra->cCodeBuffer += yytext;
296 yyextra->cCodeBuffer += yytext;
299 yyextra->cCodeBuffer += yytext;
302 yyextra->cCodeBuffer +=
"\n";
304<DefSection>^{ws}.*{nl} {
305 yyextra->cCodeBuffer += yytext;
307<DefSectionLine>.*{nl} {
308 yyextra->cCodeBuffer +=
"\n";
311<RulesSectionInit,RulesPattern>^{RulesEnd} {
312 yyextra->cCodeBuffer +=
"}\n";
315<RulesSectionInit>^{nws} {
319<RulesSectionInit>^{ws}.*{nl} {
320 yyextra->cCodeBuffer += yytext;
322<RulesSectionInit>^{nl} {
323 yyextra->cCodeBuffer += yytext;
325<RulesPattern>"<<EOF>>" {
326 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
#define repeatChar(chr, cnt)
328<RulesPattern>{EscapeRulesChar} {
329 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
331<RulesPattern>{RulesSharp} {
332 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
334<RulesPattern>{RulesCurly} {
335 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
337<RulesPattern>{StartDouble} {
338 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
339 yyextra->lastContext = YY_START;
342<RulesDouble,RulesRoundDouble>"\\\\" {
343 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
345<RulesDouble,RulesRoundDouble>"\\\"" {
346 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
349 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
350 BEGIN( yyextra->lastContext ) ;
352<RulesRoundDouble>"\"" {
353 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
356<RulesDouble,RulesRoundDouble>. {
357 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
359<RulesPattern>{StartSquare} {
360 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
361 yyextra->lastContext = YY_START;
364<RulesSquare,RulesRoundSquare>{CHARCE} {
365 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
367<RulesSquare,RulesRoundSquare>"\\[" |
368<RulesSquare,RulesRoundSquare>"\\]" {
369 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
372 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
375<RulesRoundSquare>"]" {
376 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
379<RulesSquare,RulesRoundSquare>"\\\\" {
380 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
382<RulesSquare,RulesRoundSquare>. {
383 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
385<RulesPattern>{StartRoundQuest} {
386 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
387 yyextra->lastContext = YY_START;
388 BEGIN(RulesRoundQuest);
390<RulesRoundQuest>{nl} {
391 yyextra->cCodeBuffer +=
"\n";
393<RulesRoundQuest>[^)] {
394 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
396<RulesRoundQuest>")" {
397 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
398 BEGIN(yyextra->lastContext);
400<RulesPattern>{StartRound} {
401 yyextra->roundCount++;
402 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
403 yyextra->lastContext = YY_START;
406<RulesRound>{RulesCurly} {
407 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
409<RulesRound>{StartSquare} {
410 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
411 BEGIN(RulesRoundSquare);
413<RulesRound>{StartDouble} {
414 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
415 BEGIN(RulesRoundDouble);
417<RulesRound>{EscapeRulesChar} {
418 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
421 yyextra->roundCount++;
422 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
425 yyextra->roundCount--;
426 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
427 if (!yyextra->roundCount) BEGIN( yyextra->lastContext ) ;
430 yyextra->cCodeBuffer +=
"\n";
433 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
436 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
438<RulesPattern>{ws}+"|" {
439 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
440 yyextra->curlyCount = 0;
443<RulesPattern>^{ws}*{nl} {
444 yyextra->cCodeBuffer +=
"\n";
446<RulesPattern>^{ws}+ {
449<RulesPattern>({ws}|{nl}) {
451 yyextra->curlyCount = 0;
454<RulesPattern>"\\\\" {
455 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
458 yyextra->cCodeBuffer += yytext;
459 yyextra->lastContext = YY_START;
463 yyextra->cCodeBuffer +=
repeatChar(
' ', yyleng);
465<SkipCurly>{B}*"#"{B}+[0-9]+{B}+/"\"" {
466 yyextra->cCodeBuffer += yytext;
467 yyextra->lastPreLineCtrlContext = YY_START;
468 BEGIN( PreLineCtrl );
470<PreLineCtrl>"\""[^\n\"]*"\"" {
471 yyextra->cCodeBuffer += yytext;
474 yyextra->cCodeBuffer += yytext;
477 yyextra->cCodeBuffer += yytext;
478 BEGIN( yyextra->lastPreLineCtrlContext );
481 yyextra->cCodeBuffer += yytext;
482 ++yyextra->curlyCount ;
484<SkipCurly>"}"/{BN}*{DCOMM}"<!--" |
486 yyextra->cCodeBuffer += yytext;
487 if( yyextra->curlyCount )
489 --yyextra->curlyCount ;
492<SkipCurly>"}"{BN}*{DCOMM}"<" {
493 yyextra->cCodeBuffer += yytext;
494 if ( yyextra->curlyCount )
496 --yyextra->curlyCount ;
500 yyextra->docBlockContext = SkipCurlyEndDoc;
501 if (yytext[yyleng-3]==
'/')
512 yyextra->cCodeBuffer += yytext;
513 yyextra->lastStringContext=SkipCurly;
517 yyextra->cCodeBuffer += yytext;
518 yyextra->lastPreLineCtrlContext = YY_START;
519 BEGIN( PreLineCtrl );
521<SkipCurly>{B}*{RAWBEGIN} {
525 yyextra->lastRawStringContext = YY_START;
526 yyextra->cCodeBuffer += yytext;
QCString extractBeginRawStringDelimiter(const char *rawStart)
529<SkipCurly>[^\n#"'@\\/{}<]+ {
530 yyextra->cCodeBuffer += yytext;
533 yyextra->cCodeBuffer += yytext;
534 yyextra->lastCContext = YY_START;
538 yyextra->cCodeBuffer += yytext;
539 yyextra->lastCContext = YY_START;
540 BEGIN(SkipCxxComment);
542<SkipCurly>{CHARLIT} {
543 yyextra->cCodeBuffer += yytext;
546 yyextra->cCodeBuffer += yytext;
549 yyextra->cCodeBuffer += yytext;
551<SkipCurly>({CPPC}{B}*)?{CCS}"!" {
552 yyextra->cCodeBuffer += yytext;
553 yyextra->docBlockContext = YY_START;
556<SkipCurly>{CCS}"*"[*]+{BL} {
558 yyextra->cCodeBuffer += yytext;
561 yyextra->docBlockContext = YY_START;
#define Config_getBool(name)
569<SkipCurly>({CPPC}{B}*)?{CCS}"*"/{NCOMM} {
570 yyextra->cCodeBuffer += yytext;
571 yyextra->docBlockContext = YY_START;
574<SkipCurly>{CPPC}"!" {
575 yyextra->cCodeBuffer += yytext;
576 yyextra->docBlockContext = YY_START;
579<SkipCurly>{CPPC}"/"/[^/] {
580 yyextra->cCodeBuffer += yytext;
581 yyextra->docBlockContext = YY_START;
586 yyextra->cCodeBuffer += yytext;
587 if (yyextra->curlyCount<=0)
593 yyextra->cCodeBuffer += yytext;
596 yyextra->cCodeBuffer += yytext;
597 BEGIN( yyextra->lastStringContext );
599<SkipString>{CCS}|{CCE}|{CPPC} {
600 yyextra->cCodeBuffer += yytext;
603 yyextra->cCodeBuffer += yytext;
606 yyextra->cCodeBuffer += yytext;
608<SkipCxxComment>.*"\\\n" {
609 yyextra->cCodeBuffer += yytext;
611<SkipCxxComment>{ANYopt}/\n {
612 yyextra->cCodeBuffer += yytext;
613 BEGIN( yyextra->lastCContext ) ;
616 yyextra->cCodeBuffer += yytext ;
618<Comment>{CCS} { yyextra->cCodeBuffer += yytext ; }
619<Comment>{CPPC} { yyextra->cCodeBuffer += yytext ; }
620<Comment>{CMD}("code"|"verbatim"|"iliteral") {
621 yyextra->insideCode=
TRUE;
622 yyextra->cCodeBuffer += yytext ;
624<Comment>{CMD}("endcode"|"endverbatim"|"endiliteral") {
625 yyextra->insideCode=
FALSE;
626 yyextra->cCodeBuffer += yytext ;
628<Comment>[^ \.\t\r\n\/\*]+ { yyextra->cCodeBuffer += yytext ; }
629<Comment>{CCE} { yyextra->cCodeBuffer += yytext ;
630 if (!yyextra->insideCode) BEGIN( yyextra->lastContext ) ;
632<Comment>. { yyextra->cCodeBuffer += *yytext ; }
634<SkipComment>{CPPC}|{CCS} {
635 yyextra->cCodeBuffer += yytext;
637<SkipComment>[^\*\n]+ {
638 yyextra->cCodeBuffer += yytext;
641 yyextra->cCodeBuffer += yytext;
643<SkipComment>{B}*{CCE} {
644 yyextra->cCodeBuffer += yytext;
645 BEGIN( yyextra->lastCContext );
648 yyextra->cCodeBuffer += yytext;
651 yyextra->cCodeBuffer += yytext;
654 BEGIN(yyextra->lastRawStringContext);
QCString extractEndRawStringDelimiter(const char *rawEnd)
658 yyextra->cCodeBuffer += yytext;
661 yyextra->cCodeBuffer += yytext;
664 yyextra->cCodeBuffer += yytext;
669<DocLine>[^\n]*"\n"[ \t]*{CPPC}[/!][<]? {
670 yyextra->cCodeBuffer += yytext;
672<DocLine>{B}*{CPPC}"/"[/]+{Bopt}/"\n" {
673 yyextra->cCodeBuffer += yytext;
674 BEGIN( yyextra->docBlockContext );
676<DocLine>{NONLopt}/"\n"{B}*{CPPC}[!/]{B}*{CMD}"}" {
677 yyextra->cCodeBuffer += yytext;
678 BEGIN( yyextra->docBlockContext );
680<DocLine>{NONLopt}/"\n" {
681 yyextra->cCodeBuffer += yytext;
682 BEGIN( yyextra->docBlockContext );
688 yyextra->cCodeBuffer += yytext;
689 BEGIN(yyextra->docBlockContext);
691<DocBlock>^{B}*"*"+/[^/] {
692 yyextra->cCodeBuffer += yytext;
694<DocBlock>^{B}*({CPPC})?{B}*"*"+/[^/a-z_A-Z0-9*] {
695 yyextra->cCodeBuffer += yytext;
697<DocBlock>^{B}*({CPPC}){B}* {
698 yyextra->cCodeBuffer += yytext;
701 yyextra->cCodeBuffer += yytext;
705 yyextra->cCodeBuffer += yytext;
707<DocBlock>({CMD}{CMD}){ID}/[^a-z_A-Z0-9] {
708 yyextra->cCodeBuffer += yytext;
710<DocBlock>{CMD}("f$"|"f["|"f{"|"f(") {
711 yyextra->cCodeBuffer += yytext;
712 yyextra->docBlockName=&yytext[1];
713 if (yyextra->docBlockName.at(1)==
'[')
715 yyextra->docBlockName.at(1)=
']';
717 if (yyextra->docBlockName.at(1)==
'{')
719 yyextra->docBlockName.at(1)=
'}';
721 if (yyextra->docBlockName.at(1)==
'(')
723 yyextra->docBlockName.at(1)=
')';
725 yyextra->fencedSize=0;
726 yyextra->nestedComment=
FALSE;
729<DocBlock>{B}*"<"{PRE}">" {
730 yyextra->cCodeBuffer += yytext;
731 yyextra->docBlockName=
"<pre>";
732 yyextra->fencedSize=0;
733 yyextra->nestedComment=
FALSE;
736<DocBlock>{CMD}"startuml"/[^a-z_A-Z0-9\-] {
737 yyextra->cCodeBuffer += yytext;
738 yyextra->docBlockName=
"uml";
739 yyextra->fencedSize=0;
740 yyextra->nestedComment=
FALSE;
743<DocBlock>{CMD}("verbatim"|"iliteral"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"rtfonly"|"docbookonly"|"dot"|"msc"|"code")/[^a-z_A-Z0-9\-] {
744 yyextra->cCodeBuffer += yytext;
745 yyextra->docBlockName=&yytext[1];
746 yyextra->fencedSize=0;
747 yyextra->nestedComment=
FALSE;
750<DocBlock>^({B}*"*"+)?{B}{0,3}"~~~"[~]* {
751 yyextra->cCodeBuffer += yytext;
753 yyextra->docBlockName=
"~~~";
755 yyextra->nestedComment=
FALSE;
size_t length() const
Returns the length of the string, not counting the 0-terminator.
QCString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
758<DocBlock>^({B}*"*"+)?{B}{0,3}"```"[`]* {
759 yyextra->cCodeBuffer += yytext;
761 yyextra->docBlockName=
"```";
763 yyextra->nestedComment=
FALSE;
766<DocBlock>{B}*"<code>" {
769<DocBlock>[^@*~\/\\\n]+ {
770 yyextra->cCodeBuffer += yytext;
773 yyextra->cCodeBuffer += yytext;
776 yyextra->cCodeBuffer += yytext;
780<DocCopyBlock>"</"{PRE}">" {
781 yyextra->cCodeBuffer += yytext;
782 if (yyextra->docBlockName==
"<pre>")
787<DocCopyBlock>"</"{CODE}">" {
788 yyextra->cCodeBuffer += yytext;
789 if (yyextra->docBlockName==
"<code>")
794<DocCopyBlock>{CMD}("f$"|"f]"|"f}"|"f)") {
795 yyextra->cCodeBuffer += yytext;
796 if (yyextra->docBlockName==&yytext[1])
801<DocCopyBlock>{CMD}("endverbatim"|"endiliteral"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endmanonly"|"endrtfonly"|"enddot"|"endmsc"|"enduml"|"endcode")/[^a-z_A-Z0-9] {
802 yyextra->cCodeBuffer += yytext;
803 if (yyextra->docBlockName==&yytext[4])
808<DocCopyBlock>^{B}*"*"+/{BN}+ {
809 yyextra->cCodeBuffer += yytext;
810 if ((yyextra->docBlockName==
"verbatim") || (yyextra->docBlockName==
"code") || (yyextra->docBlockName==
"iliteral"))
816 yyextra->cCodeBuffer += yytext;
819<DocCopyBlock>^{B}*"*"+/{B}+"*"{BN}* {
820 if ((yyextra->docBlockName==
"code") || (yyextra->docBlockName==
"iliteral"))
822 yyextra->cCodeBuffer += yytext;
829<DocCopyBlock>^{B}*"*"+/({ID}|"(") {
830 if ((yyextra->docBlockName==
"code") || (yyextra->docBlockName==
"iliteral"))
832 yyextra->cCodeBuffer += yytext;
839<DocCopyBlock>^{B}*"*"+/{BN}* {
840 if ((yyextra->docBlockName==
"code") || (yyextra->docBlockName==
"iliteral"))
842 if (yyextra->nestedComment)
844 yyextra->cCodeBuffer += yytext;
848 yyextra->cCodeBuffer += yytext;
856<DocCopyBlock>^({B}*"*"+)?{B}{0,3}"~~~"[~]* {
857 yyextra->cCodeBuffer += yytext;
864<DocCopyBlock>^({B}*"*"+)?{B}{0,3}"```"[`]* {
865 yyextra->cCodeBuffer += yytext;
872<DocCopyBlock>[^<@/\*\]~\$\\\n]+ {
873 yyextra->cCodeBuffer += yytext;
875<DocCopyBlock>{CCS}|{CCE}|{CPPC} {
878 yyextra->nestedComment=
TRUE;
880 else if (yytext[0]==
'*')
882 yyextra->nestedComment=
FALSE;
884 yyextra->cCodeBuffer += yytext;
887 yyextra->cCodeBuffer += yytext;
890 yyextra->cCodeBuffer += yytext;
892<SkipCurlyEndDoc>"}"{BN}*{DCOMM}"<" {
893 yyextra->docBlockContext = SkipCurlyEndDoc;
894 yyextra->cCodeBuffer += yytext;
895 if (yytext[yyleng-3]==
'/')
904<SkipCurlyEndDoc>"}" {
905 yyextra->cCodeBuffer += yytext;
910 yyextra->cCodeBuffer += yytext;
927 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
929 while( c < max_size && yyextra->inputString[yyextra->inputPosition] )
931 *buf = yyextra->inputString[yyextra->inputPosition++] ;
943 const std::shared_ptr<Entry> &rt,
946 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
948 yyextra->inputString = fileBuf;
949 yyextra->inputPosition = 0;
950 lexscannerYYrestart(0,yyscanner);
952 yyextra->current_root = rt;
953 yyextra->fileName = fileName;
954 yyextra->clangParser = clangParser;
956 rt->lang = yyextra->language;
957 msg(
"Parsing file {}...\n",yyextra->fileName);
959 yyextra->current_root = rt;
960 yyextra->current = std::make_shared<Entry>();
964 yyextra->current->name = yyextra->fileName;
965 yyextra->current->section =
EntryType(sec);
966 yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
968 yyextra->current->reset();
971 lexscannerYYlex(yyscanner);
973 rt->program.str(std::string());
981 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
983 if (yyextra->cCodeBuffer.isEmpty())
return;
984 yyextra->cOutlineParser.parseInput(yyextra->fileName,
985 yyextra->cCodeBuffer.data(),
986 yyextra->current_root,
987 yyextra->clangParser);
988 yyextra->cCodeBuffer.clear();
1001 lexscannerYYlex_init_extra(&
p->state,&
p->yyscanner);
1009 lexscannerYYlex_destroy(
p->yyscanner);
1013 const char *fileBuf,
1014 const std::shared_ptr<Entry> &root,
1017 struct yyguts_t *yyg = (
struct yyguts_t*)
p->yyscanner;
1019 yyextra->fileName = fileName;
1022 ::parseMain(
p->yyscanner,fileName,fileBuf,root,clangParser);
1028#include "lexscanner.l.h"
static bool isFlagSet(const DebugMask mask)
Wrapper class for the Entry type.
~LexOutlineParser() override
std::unique_ptr< Private > p
void parseInput(const QCString &fileName, const char *fileBuf, const std::shared_ptr< Entry > &root, ClangTUParser *clangParser) override
Parses a single input file with the goal to build an Entry tree.
static void parseMain(yyscan_t yyscanner, const QCString &fileName, const char *fileBuf, const std::shared_ptr< Entry > &rt, FortranFormat format)
const char * qPrint(const char *s)
SrcLangExt getLanguageFromFileName(const QCString &fileName, SrcLangExt defLang)
EntryType guessSection(const QCString &name)