123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784(*
Copyright 2023-2025 Chiba Institute of Technology
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*)(* Author: Masatomo Hashimoto <m.hashimoto@stair.center> *)[%%prepare_logger]moduleXfile=Diffast_misc.XfilemoduleXprint=Diffast_misc.XprintmoduleAux=Parser_auxmoduleT=Tokens_typemode=Aux.parsing_modeletmode_to_string=Aux.parsing_mode_to_stringtypemacro_body=MB_NONE|MB_SOMEofmode*T.tokenQueue.t[%%capture_pathclassc=object(self)valmain_queue=(Queue.create():T.tokenQueue.t)valsub_queue=(Queue.create():T.tokenQueue.t)valmutablemacro_queue=(Queue.create():T.tokenQueue.t)valmacro_body_tbl=(Hashtbl.create0:(string,macro_body)Hashtbl.t)valmutablesub_flag=falsevalmutablemacro_flag=falsevalmutablemacro_name=""valmutablemacro_mode=(M_NORMAL:mode)valmutablefunc_body_flag=falsemethodfunc_body_flag=func_body_flagmethodset_func_body_flag()=func_body_flag<-truemethodclear_func_body_flag()=func_body_flag<-falsemethodskip_until_newline()=matchQueue.peekmain_queuewith|NEWLINE->()|_->let_=Queue.takemain_queueinself#skip_until_newline()methoddumpfname=[%debug_log"\"%s\""fname];letdump_chch=letdump_rtrt=Printf.fprintfch"%s\n"(Token.rawtoken_to_stringrt)inletdump_rtqq=letsz=Queue.lengthqinletcount=ref0inQueue.iter(funx->incrcount;if!count=sz&&x==T.NEWLINEthen()elsedump_rtx;)qinletdump_modem=Printf.fprintfch"PMODE:%s\n"(mode_to_stringm)intrywhiletruedoletrt=Queue.takemain_queuein[%debug_log"%s"(Token.rawtoken_to_stringrt)];matchrtwith|PP_DEFINE->beginletrt1=Queue.takemain_queuein[%debug_log" %s"(Token.rawtoken_to_stringrt1)];letrt2=Queue.peekmain_queueindump_rtrt;dump_rtrt1;matchrt1with|IDENTxwhenrt2==PP_LPAREN->begintryletmb=Hashtbl.findmacro_body_tblxinHashtbl.removemacro_body_tblx;matchmbwith|MB_NONE->begin[%debug_log"MB_NONE"]end|MB_SOME(mode,q)->begin[%debug_log"%s"(mode_to_stringmacro_mode)];trywhiletruedoletrt_=Queue.takemain_queueindump_rtrt_;matchrt_with|RPAREN->raiseExit|_->()donewithExit->dump_modemode;dump_rtqq;self#skip_until_newline()endwithNot_found->()end|IDENTx->begintryletmb=Hashtbl.findmacro_body_tblxinHashtbl.removemacro_body_tblx;matchmbwith|MB_NONE->begin[%debug_log"mb=MB_NONE"]end|MB_SOME(mode,q)->begin[%debug_log"%s"(mode_to_stringmacro_mode)];self#skip_until_newline();dump_modemode;dump_rtqq;self#skip_until_newline()endwithNot_found->()end|_->()end|_->dump_rtrtdonewithQueue.Empty->()inXfile.dumpfnamedump_chmethodenter_sub()=[%debug_log"sub_flag=%B"sub_flag];ifnotsub_flagthenbeginsub_flag<-true;self#clear_sub()endmethodexit_sub()=[%debug_log"sub_flag=%B"sub_flag];ifsub_flagthenbeginbegin%debug_blockifmacro_flagthenQueue.iter(funrt->[%debug_log"macro_queue: %s"(Token.rawtoken_to_stringrt)])macro_queueelse[%debug_log"main_queue"]end;letq=ifmacro_flagthenmacro_queueelsemain_queueinQueue.iter(funrt->[%debug_log"%s"(Token.rawtoken_to_stringrt)];Queue.addrtq)sub_queue;self#clear_sub();sub_flag<-falseendmethodclear_sub()=[%debug_log"@"];ifsub_flagthenQueue.clearsub_queuemethodenter_macronamemode=[%debug_log"%s (%s)"name(mode_to_stringmode)];macro_flag<-true;macro_name<-name;macro_mode<-mode;self#clear_macro()methodreg_dummy_macromacro_name=[%debug_log"%s"macro_name];Hashtbl.addmacro_body_tblmacro_nameMB_NONEmethodexit_macro()=[%debug_log"%s (%s)"macro_name(mode_to_stringmacro_mode)];Queue.iter(funrt->let_=rtin[%debug_log"macro_queue: %s"(Token.rawtoken_to_stringrt)])macro_queue;Hashtbl.addmacro_body_tblmacro_name(MB_SOME(macro_mode,macro_queue));macro_queue<-Queue.create();macro_flag<-false;macro_name<-"";macro_mode<-M_NORMALmethodclear_macro()=[%debug_log"@"];ifmacro_flagthenQueue.clearmacro_queuemethodadd_tokenrt=[%debug_log"sub_flag=%B macro_flag=%B func_body_flag=%B rt=%s"sub_flagmacro_flagfunc_body_flag(Token.rawtoken_to_stringrt)];ifnotfunc_body_flagthen()elseifsub_flagthenbeginQueue.addrtsub_queueendelseifmacro_flagthenbeginifrt!=EOFthenbeginQueue.addrtmacro_queue;Queue.iter(funx->let_=xin[%debug_log" %s"(Token.rawtoken_to_stringx)])macro_queueendendelsebeginQueue.addrtmain_queueendend]letsplit_wordword=tryleti0=String.index_fromword0':'inletk0=String.subword0i0intrybeginmatchk0with|"DOXYGEN_LINE"|"PP_ELIF"|"PP_ELSE"|"PP_ENDIF"->raiseNot_found|_->()end;leti1=String.index_fromword(i0+1)':'inletc0=word.[i0+1]inifc0='\''&&word.[i0+2]=':'thenraiseNot_foundelseletc1=word.[i0+2]inifc0='\\'&&c1='"'thenraiseNot_foundelseif(c0='L'||c0='u'||c0='U'||c0='R'||c0='@')&&(c1='\\'&&word.[i0+3]='"'||c1='\'')thenraiseNot_foundelseif(c0='u'&&(c1='8'||c1='R')||c0='L'&&c1='R')&&letc2=word.[i0+3]inc2='\\'&&word.[i0+4]='"'||c2='\''thenraiseNot_foundelseifc0='u'&&c1='8'&&word.[i0+3]='R'&&letc3=word.[i0+4]inc3='\\'&&word.[i0+5]='"'||c3='\''thenraiseNot_foundelseifc0='$'&&c1='{'thenraiseNot_found;letk1=String.subword(i0+1)(i1-i0-1)inletk2=String.subword(i1+1)(String.lengthword-i1-1)in[k0;k1;k2]with(*Not_found*)_->letk1=String.subword(i0+1)(String.lengthword-i0-1)in[k0;k1]with|Not_found->[word]|_->invalid_arg"split_word"letmode_of_stringmodes:mode=matchmodewith|"M_NORMAL"->M_NORMAL|"M_STMTS"->M_STMTS|"M_DECLS_SUB"->M_DECLS_SUBs|"M_MEM_DECLS_SUB"->M_MEM_DECLS_SUBs|"M_STMTS_SUB"->M_STMTS_SUBs|"M_EXPR_SUB"->M_EXPR_SUBs|"M_INIT_SUB"->M_INIT_SUBs|"M_TYPE_SUB"->M_TYPE_SUBs|"M_SPECS_SUB"->M_SPECS_SUBs|"M_DTORS_SUB"->M_DTORS_SUBs|"M_ETORS_SUB"->M_ETORS_SUBs|"M_OBJC_DECLS_SUB"->M_OBJC_DECLS_SUBs|_->assertfalseletword_to_tokenword:T.token=matchsplit_wordwordwith|[w]->beginmatchwwith|"ALIGNAS"->ALIGNAS|"ALIGNOF"->ALIGNOF|"AND"->AND|"AND_EQ"->AND_EQ|"ASM"->ASM|"ASM_SHADER"->ASM_SHADER|"ASSERT"->ASSERT|"AT"->AT|"ATTR_LBRACKET"->ATTR_LBRACKET|"AUDIT"->AUDIT|"AUTO"->AUTO|"AXIOM"->AXIOM|"BASE_COLON"->BASE_COLON|"BEGIN_ASM"->BEGIN_ASM|"BEGIN_ETORS"->BEGIN_ETORS|"BEGIN_QPROP"->BEGIN_QPROP|"BEGIN_STMTS"->BEGIN_STMTS|"BITAND"->BITAND|"BITOR"->BITOR|"BOOL"->BOOL|"BRACE_PAREN_MARKER"->BRACE_PAREN_MARKER|"BREAK"->BREAK|"BS"->BS|"CASE"->CASE|"CATCH"->CATCH|"CHAR"->CHAR|"CHAR16_T"->CHAR16_T|"CHAR32_T"->CHAR32_T|"CHAR8_T"->CHAR8_T|"CLASS"->CLASS|"CLASS_LBRACE"->CLASS_LBRACE|"COLON"->COLON|"COLON_COLON"->COLON_COLON|"COLON_GT"->COLON_GT|"COMMA"->COMMA|"COMMA_BROKEN"->COMMA_BROKEN|"COMPL"->COMPL|"CONCEPT"->CONCEPT|"COND_MARKER"->COND_MARKER|"CONST"->CONST|"CONSTEVAL"->CONSTEVAL|"CONSTEXPR"->CONSTEXPR|"CONSTINIT"->CONSTINIT|"CONST_CAST"->CONST_CAST|"CONTINUE"->CONTINUE|"CO_AWAIT"->CO_AWAIT|"CO_RETURN"->CO_RETURN|"CO_YIELD"->CO_YIELD|"CUDA_GT_GT_GT"->CUDA_GT_GT_GT|"CUDA_LT_LT_LT"->CUDA_LT_LT_LT|"DECLTYPE"->DECLTYPE|"DEFAULT"->DEFAULT|"DEFINED"->DEFINED|"DELETE"->DELETE|"DO"->DO|"DOT"->DOT|"DOT_STAR"->DOT_STAR|"DOUBLE"->DOUBLE|"DUMMY_BODY"->DUMMY_BODY|"DUMMY_DTOR"->DUMMY_DTOR|"DUMMY_EXPR"->DUMMY_EXPR|"DUMMY_STMT"->DUMMY_STMT|"DUMMY_TYPE"->DUMMY_TYPE|"DYNAMIC_CAST"->DYNAMIC_CAST|"ELAB_CLASS"->ELAB_CLASS|"ELAB_ENUM"->ELAB_ENUM|"ELLIPSIS"->ELLIPSIS|"ELLIPSIS_"->ELLIPSIS_|"ELSE"->ELSE|"END_ASM"->END_ASM|"END_ETORS"->END_ETORS|"END_QPROP"->END_QPROP|"END_STMTS"->END_STMTS|"ENSURES"->ENSURES|"ENUM"->ENUM|"EOF"->EOF|"EQ"->EQ|"EQ_EQ"->EQ_EQ|"EQ_EQ_EQ"->EQ_EQ_EQ|"EXPECTS"->EXPECTS|"EXPLICIT"->EXPLICIT|"EXPORT"->EXPORT|"EXTERN"->EXTERN|"FALSE"->FALSE|"FINAL"->FINAL|"FLOAT"->FLOAT|"FOLD_LPAREN"->FOLD_LPAREN|"FOR"->FOR|"FRIEND"->FRIEND|"GOTO"->GOTO|"GT"->GT|"GT_EQ"->GT_EQ|"GT_GT"->GT_GT|"GT_GT_EQ"->GT_GT_EQ|"GT_GT_GT"->GT_GT_GT|"HAS_CPP_ATTRIBUTE"->HAS_CPP_ATTRIBUTE|"HAS_INCLUDE"->HAS_INCLUDE|"HEAD_COLON_COLON"->HEAD_COLON_COLON|"IF"->IF|"IMPORT"->IMPORT|"IN"->IN|"INI_LBRACE"->INI_LBRACE|"INLINE"->INLINE|"INT"->INT|"LAM_LBRACKET"->LAM_LBRACKET|"LAM_MARKER"->LAM_MARKER|"LBRACE"->LBRACE|"LBRACKET"->LBRACKET|"LONG"->LONG|"LPAREN"->LPAREN|"LT"->LT|"LT_COLON"->LT_COLON|"LT_EQ"->LT_EQ|"LT_EQ_GT"->LT_EQ_GT|"LT_LT"->LT_LT|"LT_LT_EQ"->LT_LT_EQ|"LT_PERC"->LT_PERC|"MARKER"->MARKER|"MINUS"->MINUS|"MINUS_EQ"->MINUS_EQ|"MINUS_GT"->MINUS_GT|"MINUS_GT_STAR"->MINUS_GT_STAR|"MINUS_MINUS"->MINUS_MINUS|"MOCK_MARKER"->MOCK_MARKER|"MS_ATTR_LBRACKET"->MS_ATTR_LBRACKET|"MS_PROPERTY"->MS_PROPERTY|"MS_REF"->MS_REF|"MS_SEALED"->MS_SEALED|"MUTABLE"->MUTABLE|"NAMESPACE"->NAMESPACE|"NEW"->NEW|"NEWLINE"->NEWLINE|"NOEXCEPT"->NOEXCEPT|"NOT"->NOT|"NOT_EQ"->NOT_EQ|"NULLPTR"->NULLPTR|"OBJC_ABAILABLE"->OBJC_AVAILABLE|"OBJC_AUTORELEASEPOOL"->OBJC_AUTORELEASEPOOL|"OBJC_CATCH"->OBJC_CATCH|"OBJC_CLASS"->OBJC_CLASS|"OBJC_DEFS"->OBJC_DEFS|"OBJC_DYNAMIC"->OBJC_DYNAMIC|"OBJC_ENCODE"->OBJC_ENCODE|"OBJC_END"->OBJC_END|"OBJC_FINALLY"->OBJC_FINALLY|"OBJC_INTERFACE"->OBJC_INTERFACE|"OBJC_LBRACKET"->OBJC_LBRACKET|"OBJC_MINUS"->OBJC_MINUS|"OBJC_OPTIONAL"->OBJC_OPTIONAL|"OBJC_PACKAGE"->OBJC_PACKAGE|"OBJC_PLUS"->OBJC_PLUS|"OBJC_PRIVATE"->OBJC_PRIVATE|"OBJC_PROPERTY"->OBJC_PROPERTY|"OBJC_PROTECTED"->OBJC_PROTECTED|"OBJC_PROTOCOL"->OBJC_PROTOCOL|"OBJC_PUBLIC"->OBJC_PUBLIC|"OBJC_REQUIRED"->OBJC_REQUIRED|"OBJC_SELECTOR"->OBJC_SELECTOR|"OBJC_SYNCHRONIZED"->OBJC_SYNCHRONIZED|"OBJC_SYNTHESIZE"->OBJC_SYNTHESIZE|"OBJC_THROW"->OBJC_THROW|"OBJC_TRY"->OBJC_TRY|"ODD_ELSE"->ODD_ELSE|"ODD_FOR"->ODD_FOR|"ODD_LBRACE"->ODD_LBRACE|"ODD_RBRACE"->ODD_RBRACE|"OPERATOR"->OPERATOR|"OR"->OR|"OR_EQ"->OR_EQ|"OVERRIDE"->OVERRIDE|"PERC"->PERC|"PERC_COLON"->PERC_COLON|"PERC_COLON_PERC_COLON"->PERC_COLON_PERC_COLON|"PERC_EQ"->PERC_EQ|"PERC_GT"->PERC_GT|"PLUS"->PLUS|"PLUS_EQ"->PLUS_EQ|"PLUS_PLUS"->PLUS_PLUS|"PP_"->PP_|"PP_DEFINE"->PP_DEFINE|"PP_ENDIF_"->PP_ENDIF_|"PP_ERROR"->PP_ERROR|"PP_IF"->PP_IF|"PP_IFDEF"->PP_IFDEF|"PP_IFDEF_A"->PP_IFDEF_A|"PP_IFDEF_ATTR"->PP_IFDEF_ATTR|"PP_IFDEF_B"->PP_IFDEF_B|"PP_IFDEF_BROKEN"->PP_IFDEF_BROKEN|"PP_IFDEF_C"->PP_IFDEF_C|"PP_IFDEF_CB"->PP_IFDEF_CB|"PP_IFDEF_CLOSE_OPEN"->PP_IFDEF_CLOSE_OPEN|"PP_IFDEF_CLOSING"->PP_IFDEF_CLOSING|"PP_IFDEF_COND"->PP_IFDEF_COND|"PP_IFDEF_COND_"->PP_IFDEF_COND_|"PP_IFDEF_D"->PP_IFDEF_D|"PP_IFDEF_E"->PP_IFDEF_E|"PP_IFDEF_EH"->PP_IFDEF_EH|"PP_IFDEF_H"->PP_IFDEF_H|"PP_IFDEF_I"->PP_IFDEF_I|"PP_IFDEF_O"->PP_IFDEF_O|"PP_IFDEF_P"->PP_IFDEF_P|"PP_IFDEF_S"->PP_IFDEF_S|"PP_IFDEF_SHIFT"->PP_IFDEF_SHIFT|"PP_IFDEF_X"->PP_IFDEF_X|"PP_IFNDEF"->PP_IFNDEF|"PP_IFNDEF_A"->PP_IFNDEF_A|"PP_IFNDEF_ATTR"->PP_IFNDEF_ATTR|"PP_IFNDEF_B"->PP_IFNDEF_B|"PP_IFNDEF_BROKEN"->PP_IFNDEF_BROKEN|"PP_IFNDEF_C"->PP_IFNDEF_C|"PP_IFNDEF_CB"->PP_IFNDEF_CB|"PP_IFNDEF_CLOSE_OPEN"->PP_IFNDEF_CLOSE_OPEN|"PP_IFNDEF_CLOSING"->PP_IFNDEF_CLOSING|"PP_IFNDEF_COND"->PP_IFNDEF_COND|"PP_IFNDEF_COND_"->PP_IFNDEF_COND_|"PP_IFNDEF_D"->PP_IFNDEF_D|"PP_IFNDEF_E"->PP_IFNDEF_E|"PP_IFNDEF_EH"->PP_IFNDEF_EH|"PP_IFNDEF_H"->PP_IFNDEF_H|"PP_IFNDEF_I"->PP_IFNDEF_I|"PP_IFNDEF_O"->PP_IFNDEF_O|"PP_IFNDEF_P"->PP_IFNDEF_P|"PP_IFNDEF_S"->PP_IFNDEF_S|"PP_IFNDEF_SHIFT"->PP_IFNDEF_SHIFT|"PP_IFNDEF_X"->PP_IFNDEF_X|"PP_IF_A"->PP_IF_A|"PP_IF_ATTR"->PP_IF_ATTR|"PP_IF_B"->PP_IF_B|"PP_IF_BROKEN"->PP_IF_BROKEN|"PP_IF_C"->PP_IF_C|"PP_IF_CB"->PP_IF_CB|"PP_IF_CLOSE_OPEN"->PP_IF_CLOSE_OPEN|"PP_IF_CLOSING"->PP_IF_CLOSING|"PP_IF_COND"->PP_IF_COND|"PP_IF_COND_"->PP_IF_COND_|"PP_IF_D"->PP_IF_D|"PP_IF_E"->PP_IF_E|"PP_IF_EH"->PP_IF_EH|"PP_IF_H"->PP_IF_H|"PP_IF_I"->PP_IF_I|"PP_IF_O"->PP_IF_O|"PP_IF_P"->PP_IF_P|"PP_IF_S"->PP_IF_S|"PP_IF_SHIFT"->PP_IF_SHIFT|"PP_IF_X"->PP_IF_X|"PP_IMPORT"->PP_IMPORT|"PP_INCLUDE"->PP_INCLUDE|"PP_LINE"->PP_LINE|"PP_LPAREN"->PP_LPAREN|"PP_MARKER"->PP_MARKER|"PP_ODD_IF"->PP_ODD_IF|"PP_ODD_IFDEF"->PP_ODD_IFDEF|"PP_ODD_IFNDEF"->PP_ODD_IFNDEF|"PP_PRAGMA"->PP_PRAGMA|"PP_UNDEF"->PP_UNDEF|"PRIVATE"->PRIVATE|"PROTECTED"->PROTECTED|"PS_LPAREN"->PS_LPAREN|"PTR_AMP"->PTR_AMP|"PTR_AMP_AMP"->PTR_AMP_AMP|"PTR_HAT"->PTR_HAT|"PTR_STAR"->PTR_STAR|"PUBLIC"->PUBLIC|"PURE_ZERO"->PURE_ZERO|"QUEST"->QUEST|"RBRACE"->RBRACE|"RBRACKET"->RBRACKET|"REGISTER"->REGISTER|"REINTERPRET_CAST"->REINTERPRET_CAST|"REQUIRES"->REQUIRES|"RETURN"->RETURN|"RPAREN"->RPAREN|"SECTION_MARKER"->SECTION_MARKER|"SEMICOLON_"->SEMICOLON_|"SHARP"->SHARP|"SHARP_SHARP"->SHARP_SHARP|"SHORT"->SHORT|"SIGNED"->SIGNED|"SIZEOF"->SIZEOF|"SLASH"->SLASH|"SLASH_EQ"->SLASH_EQ|"SS_LPAREN"->SS_LPAREN|"STAR"->STAR|"STAR_EQ"->STAR_EQ|"STATIC"->STATIC|"STATIC_ASSERT"->STATIC_ASSERT|"STATIC_CAST"->STATIC_CAST|"STRUCT"->STRUCT|"STR_MARKER"->STR_MARKER|"SUB_REQUIRES"->SUB_REQUIRES|"SUFFIX_MARKER"->SUFFIX_MARKER|"SWITCH"->SWITCH|"S_LPAREN"->S_LPAREN|"S_RPAREN"->S_RPAREN|"TEMPLATE"->TEMPLATE|"TEMPL_GT"->TEMPL_GT|"TEMPL_LT"->TEMPL_LT|"TEMPL_LT_"->TEMPL_LT_|"THIS"->THIS|"THREAD_LOCAL"->THREAD_LOCAL|"THROW"->THROW|"THROW_"->THROW_|"TRUE"->TRUE|"TRY"->TRY|"TYPEDEF"->TYPEDEF|"TYPEID"->TYPEID|"TYPENAME"->TYPENAME|"TY_HAT"->TY_HAT|"TY_LPAREN"->TY_LPAREN|"TY_LPAREN_"->TY_LPAREN_|"TY_TEMPL_GT"->TY_TEMPL_GT|"TY_TEMPL_GT_"->TY_TEMPL_GT_|"TY_TILDE"->TY_TILDE|"UNION"->UNION|"UNSIGNED"->UNSIGNED|"USING"->USING|"VAX_GLOBALDEF"->VAX_GLOBALDEF|"VIRTUAL"->VIRTUAL|"VOID"->VOID|"VOLATILE"->VOLATILE|"WCHAR_T"->WCHAR_T|"WHILE"->WHILE|"XOR"->XOR|"XOR_EQ"->XOR_EQ|_->assertfalseend|[w;x]->beginmatchw,xwith|"PMODE",m->PMODE(mode_of_stringm"")|"GT_7",b->GT_7(ref(bool_of_stringb))|"STR_MACRO",s->STR_MACROs|"INT_MACRO",s->INT_MACROs|"DECL_MACRO",s->DECL_MACROs|"PRAGMA_MACRO",s->PRAGMA_MACROs|"STMT_MACRO",s->STMT_MACROs|"VIRT_SPEC_MACRO",s->VIRT_SPEC_MACROs|"OP_MACRO",s->OP_MACROs|"PARAM_DECL_MACRO",s->PARAM_DECL_MACROs|"PARAMS_MACRO",s->PARAMS_MACROs|"PARAMS_BODY_MACRO",s->PARAMS_BODY_MACROs|"ARG_MACRO",s->ARG_MACROs|"ARGS_MACRO",s->ARGS_MACROs|"NEW_INIT_MACRO",s->NEW_INIT_MACROs|"ATTR_MACRO",s->ATTR_MACROs|"ACC_SPEC_MACRO",s->ACC_SPEC_MACROs|"DECL_SPEC_MACRO",s->DECL_SPEC_MACROs|"CC_MACRO",s->CC_MACROs|"LAM_MACRO",s->LAM_MACROs|"CV_MACRO",s->CV_MACROs|"NOEXCEPT_MACRO",s->NOEXCEPT_MACROs|"NS_MACRO",s->NS_MACROs|"EMPTY_MACRO",s->EMPTY_MACROs|"DELIM_MACRO",s->DELIM_MACROs|"BLOCK_HEAD_MACRO",s->BLOCK_HEAD_MACROs|"BLOCK_END_MACRO",s->BLOCK_END_MACROs|"TYPE_MACRO",s->TYPE_MACROs|"BASE_MACRO",s->BASE_MACROs|"BASE_SPEC_MACRO",s->BASE_SPEC_MACROs|"SUFFIX_MACRO",s->SUFFIX_MACROs|"PTR_MACRO",s->PTR_MACROs|"BODY_MACRO",s->BODY_MACROs|"DTOR_MACRO",s->DTOR_MACROs|"CLASS_HEAD_MACRO",s->CLASS_HEAD_MACROs|"FUNC_HEAD_MACRO",s->FUNC_HEAD_MACROs|"CAST_HEAD_MACRO",s->CAST_HEAD_MACROs|"OBJC_PROTOCOL_REF_LIST_MACRO",s->OBJC_PROTOCOL_REF_LIST_MACROs|"OBJC_SEL_MACRO",s->OBJC_SEL_MACROs|"CLASS_BODY_HEAD_MACRO",s->CLASS_BODY_HEAD_MACROs|"CLASS_BODY_END_MACRO",s->CLASS_BODY_END_MACROs|"IDENT",s->IDENTs|"IDENT_",s->IDENT_s|"IDENT_V",s->IDENT_Vs|"IDENT_B",s->IDENT_Bs|"IDENT_C",s->IDENT_Cs|"IDENT_E",s->IDENT_Es|"IDENT_BM",s->IDENT_BMs|"IDENT_DM",s->IDENT_DMs|"IDENT_EM",s->IDENT_EMs|"IDENT_SM",s->IDENT_SMs|"IDENT_TM",s->IDENT_TMs|"IDENT_IM",s->IDENT_IMs|"IDENT_PM",s->IDENT_PMs|"IDENT_PBM",s->IDENT_PBMs|"IDENT_PGM",s->IDENT_PGMs|"IDENT_CM",s->IDENT_CMs|"IDENT_LM",s->IDENT_LMs|"IDENT_LPAREN",s->IDENT_LPARENs|"IDENT_AM",s->IDENT_AMs|"IDENT_OM",s->IDENT_OMs|"IDENT_TPM",s->IDENT_TPMs|"IDENT_NSM",s->IDENT_NSMs|"IDENT_DSM",s->IDENT_DSMs|"IDENT_BHM",s->IDENT_BHMs|"IDENT_BIM",s->IDENT_BIMs|"IDENT_BEM",s->IDENT_BEMs|"IDENT_BFM",s->IDENT_BFMs|"IDENT_BSM",s->IDENT_BSMs|"IDENT_CHM",s->IDENT_CHMs|"IDENT_CTM",s->IDENT_CTMs|"IDENT_AGM",s->IDENT_AGMs|"IDENT_AGSM",s->IDENT_AGSMs|"IDENT_LOM",s->IDENT_LOMs|"IDENT_PDM",s->IDENT_PDMs|"IDENT_VM",s->IDENT_VMs|"IDENT_SXM",s->IDENT_SXMs|"IDENT_DSL",s->IDENT_DSLs|"IDENT_DLM",s->IDENT_DLMs|"IDENT_CBHM",s->IDENT_CBHMs|"IDENT_CBEM",s->IDENT_CBEMs|"IDENT_IHM",s->IDENT_IHMs|"IDENT_IEM",s->IDENT_IEMs|"EXTERN_X",s->EXTERN_Xs|"BAR_BAR_BROKEN",i->BAR_BAR_BROKENi|"AMP_AMP_BROKEN",i->AMP_AMP_BROKENi|"PP_ODD_ENDIF",x->PP_ODD_ENDIFx|"PP_ODD_ELIF",x->PP_ODD_ELIFx|"PP_ODD_ELSE",x->PP_ODD_ELSEx|"PP_STRINGIZED",s->PP_STRINGIZEDs|"INT_LITERAL",s->INT_LITERALs|"CHAR_LITERAL",s->CHAR_LITERALs|"FLOAT_LITERAL",s->FLOAT_LITERALs|"STR_LITERAL",s->STR_LITERAL(Scanf.unescapeds)|"BOOL_LITERAL",s->BOOL_LITERALs|"USER_INT_LITERAL",s->USER_INT_LITERALs|"USER_FLOAT_LITERAL",s->USER_FLOAT_LITERALs|"USER_STR_LITERAL",s->USER_STR_LITERALs|"USER_CHAR_LITERAL",s->USER_CHAR_LITERALs|"RESTRICT",s->RESTRICTs|"MS_ASM",s->MS_ASMs|"MS_PRAGMA",s->MS_PRAGMAs|"MS_CDECL",s->MS_CDECLs|"MS_STDCALL",s->MS_STDCALLs|"GNU_ASM",s->GNU_ASMs|"GNU_ATTR",s->GNU_ATTRs|"SEMICOLON",b->SEMICOLON(bool_of_stringb)|"TILDE",s->TILDEs|"EXCLAM",s->EXCLAMs|"HAT",s->HATs|"AMP",s->AMPs|"BAR",s->BARs|"HAT_EQ",s->HAT_EQs|"AMP_EQ",s->AMP_EQs|"BAR_EQ",s->BAR_EQs|"EXCLAM_EQ",s->EXCLAM_EQs|"AMP_AMP",s->AMP_AMPs|"BAR_BAR",s->BAR_BARs|"PP_ELIF",x->PP_ELIF(refx)|"PP_ELSE",x->PP_ELSE(refx)|"PP_ENDIF",x->PP_ENDIF(refx)|"PP_UNKNOWN",s->PP_UNKNOWNs|"BS_IDENT",s->BS_IDENTs|"DOXYGEN_CMD",s->DOXYGEN_CMDs|"DOXYGEN_LINE",s->DOXYGEN_LINEs|"OBJC_UNKNOWN",s->OBJC_UNKNOWNs|_->assertfalseend|[w;x;y]->beginmatchw,x,ywith|"PMODE",m,s->PMODE(mode_of_stringms)|"CONFLICT_MARKER",b,s->CONFLICT_MARKER(ref(bool_of_stringb),s)|"BRACE_LEVEL",lv,b->BRACE_LEVEL(int_of_stringlv,bool_of_stringb)|_->assertfalseend|_->assertfalse[%%capture_pathletqueue_from_fileqfpath=letch=open_infpathinletcount=ref0intrywhiletruedoletw=input_linechin[%debug_log"%s"w];letrt=word_to_tokenwin[%debug_log"[%d] ----- %s"!count(Token.rawtoken_to_stringrt)];Queue.addrtq;incrcountdonewith|End_of_file->close_inch|exn->beginXprint.error"!!! %s"(Printexc.to_stringexn);close_inch;exit1end]