\d6ddlmZmZmZGddejZGddeZGddeZGdd eZ d d Z d S))grammartokentokenizeceZdZdS) PgenGrammarN)__name__ __module__ __qualname__#..\python\lib\lib2to3\pgen2\pgen.pyrrsDr rc~eZdZddZdZdZdZdZdZdZ d Z d Z d Z d Z d ZdZdZdZddZdZdZdS)ParserGeneratorNcNd}|t|d}|j}||_||_t j|j|_|| \|_ |_ | |i|_ | dS)Nzutf-8)encoding)openclosefilenamestreamrgenerate_tokensreadline generatorgettokenparsedfas startsymbolfirst addfirstsets)selfrr close_streams r __init__zParserGenerator.__init__ s >(W555F!%00HOOQ_U%;T$BCCC,2AN5)!M!t44!&#..55555//////QX%%8F++HOOVTN333'-AHV$!M8z)))5)))KKEQx!! "AJ&&:e,,HOOUZ$7888(.AJu%!M!u-QX%%8F++HOOVTN333'-AHV$!Mr ct|j}||D] }||jvr||!dSN)r%rr&r'r calcfirst)rr8r9s r rzParserGenerator.addfirstsetsksaTY^^%%&&  % %D4:%%t$$$ % %r c .|j|}d|j|<|d}i}i}|jD]\}}||jvrh||jvr"|j|}|t d|zn"|||j|}|||||<vd||<|di||<i} |D]4\}} | D],} | | vr!t d|d| d|d| | || | <-5||j|<dS)Nr#zrecursion for rule %rrzrule z is ambiguous; z is in the first sets of z as well as )rrr.r/ ValueErrorrWupdate) rr9r;r<totalset overlapcheckr=r>fsetinverseitsfirstsymbols r rWzParserGenerator.calcfirstssio 4A  :++-- 1 1KE4 !!DJ&&:e,D|()@4)GHHH$NN5))):e,D%%%&* U##"#',aj U##+1133 ( (OE8" ( (W$$$*&*ddFFFEEE76??&LMMM#(  ( $ 4r cti}d}|jtjkr|jtjkr)||jtjk)|tj}|tjd|\}}|tj| ||}t|}| |t|}|||<||}|jtjk||fS)N:) typer ENDMARKERNEWLINErexpectrQOP parse_rhsmake_dfar* simplify_dfa) rrrr9azr;oldlennewlens r rzParserGenerator.parses  i5?**)u},, )u},,;;uz**D KK# & & &>>##DAq KK & & &--1%%CXXF   c " " "XXFDJ"" #i5?**$[  r c  t|tsJt|tsJ fd} fd t|||g}|D]}i}|jD]1}|jD]'\}} |  | ||i(2t |D]R\}} |D]} | j| krn&t| |} || | | |S|S)Nc$i}|||SrVr )r<base addclosures r closurez)ParserGenerator.make_dfa..closuresD Jud # # #Kr ct|tsJ||vrdSd||<|jD]\}}| ||dSrA)rKNFAStater.)r<rqr=r>rrs r rrz,ParserGenerator.make_dfa..addclosuresgeX.. . . .}}DK$z + + t=JtT*** + +r ) rKruDFAStatenfasetr. setdefaultr-r/r0addarc) rr6finishrsr4r<r.nfastater=r>rwstrrs @r rizParserGenerator.make_dfas{ %*****&(+++++      + + + + +775>>6223 ( (ED!L E E#+=EEKE4(" 4)C)CDDDE"( !5!5 ( ( v &&ByF**+"&&11BMM"%%% R'''' ( r cltd||g}t|D]\}}td|||urdpd|jD]l\}}||vr||} n$t |} |||td| zXtd|| fzmdS)NzDump of NFA for State(final)z -> %d %s -> %d)print enumerater.r2r*r0) rr9r6rztodor:r<r=r>js r dump_nfazParserGenerator.dump_nfas &&&w!$ 7 7HAu )Q =I C D D D$z 7 7 t4<< 4((AAD AKK%%%=+/****.E1:56666 7 7 7r c *td|t|D]r\}}td||jrdpdt|jD],\}}td|||fz-sdS)NzDump of DFA forr~rrr)rrr3r-r.r/r2)rr9r;r:r<r=r>s r dump_dfazParserGenerator.dump_dfas &&&!# A AHAu )Q ;) Ar B B B%ej&6&6&8&899 A A tnsyy'??@@@@ A A Ar cd}|rnd}t|D]X\}}t|dzt|D]2}||}||kr"||=|D]}|||d}n3Y|ldSdS)NTFr)rranger* unifystate)rr;changesr:state_irstate_jr<s r rjzParserGenerator.simplify_dfas G'nn   7qsCHH--A!!fG'))F%(??E!,,Wg>>>>"& *      r c|\}}|jdkr||fSt}t}|||||jdkr`||\}}|||||jdk`||fS)N|) parse_altrTruryr)rrkrlaazzs r rhzParserGenerator.parse_rhss~~1 :  a4KBB IIaLLL HHRLLL*## ~~''1 !  *## r6Mr c4|\}}|jdvs|jtjtjfvrV|\}}|||}|jdv7|jtjtjfvV||fS)N)([) parse_itemrTrcrrQSTRINGry)rrkbr7ds r rzParserGenerator.parse_alt s  1zZ''yUZ666??$$DAq HHQKKKA zZ''yUZ666!t r c|jdkrd||\}}|tjd||||fS|\}}|j}|dvr||fS||||dkr||fS||fS)Nr])+*r)rTrrhrfrrgry parse_atom)rrkrlrTs r rzParserGenerator.parse_items :   MMOOO>>##DAq KK# & & & HHQKKKa4K??$$DAqJEJ&&!t MMOOO HHQKKK||!t !t r c|jdkrO||\}}|tjd||fS|jtjtjfvrOt}t}| ||j|||fS| d|j|jdS)Nr)z+expected (...) or NAME or STRING, got %s/%s) rTrrhrfrrgrcrQrrury raise_error)rrkrls r rzParserGenerator.parse_atom(s :   MMOOO>>##DAq KK# & & &a4K Y5:u|4 4 4 A A HHQ # # # MMOOOa4K   J!Y  4 4 4 4 4r c|j|ks |.|j|kr#|d|||j|j|j}||S)Nzexpected %s/%s, got %s/%s)rcrTrr)rrcrTs r rfzParserGenerator.expect9sd 9  !2tzU7J7J   8!5$)TZ A A A   r ct|j}|dtjtjfvr4t|j}|dtjtjfv4|\|_|_|_|_|_ dS)Nr#) r>rrCOMMENTNLrcrTbeginendline)rtups r rzParserGenerator.gettokenAsr4>""!f)8;777t~&&C!f)8;777AD> 4:tz48TYYYr c |rG ||z}n@#d|gttt|z}YnxYwt ||j|jd|jd|jf)N r#r)joinr%mapstr SyntaxErrorrrr)rmsgargss r rzParserGenerator.raise_errorHs  = =Dj =hhutCTNN';';;<<# tx{ $ TY 899 9s  ;ArV)rr r r!r?r5r1rrWrrirrrjrhrrrrfrrr r r rr s4    2,",","\%%%$$$<!!!0"""H777 AAA*"(444"EEE99999r rceZdZdZddZdS)rucg|_dSrV)r.)rs r r!zNFAState.__init__Ss  r Nc|t|tsJt|tsJ|j||fdSrV)rKrrur.r0rr>r=s r ryzNFAState.addarcVsO} 5# 6 6}}}$))))) %'''''r rV)rr r r!ryr r r ruruQs7((((((r ruc*eZdZdZdZdZdZdZdS)rvct|tsJttt|tsJt|tsJ||_||v|_i|_dSrV)rKdictr>iterrurwr3r.)rrwfinals r r!zDFAState.__init__]so&$'''''$tF||,,h77777%*****   r ct|tsJ||jvsJt|tsJ||j|<dSrV)rKrr.rvrs r ryzDFAState.addarcesS%%%%%%DI%%%%$))))) %r c`|jD]\}}||ur ||j|<dSrV)r.r/)roldnewr=r>s r rzDFAState.unifystateksA9??,, ' 'KE4s{{#& %  ' 'r c,t|tsJ|j|jkrdSt|jt|jkrdS|jD]$\}}||j|urdS%dS)NFT)rKrvr3r*r.r/get)rotherr=r>s r __eq__zDFAState.__eq__ps%***** <5= ( (5 ty>>S__ , ,59??,,  KE45:>>%0000uu1tr N)rr r r!ryrr__hash__r r r rvrv[sQ   '''   HHHr rv Grammar.txtcHt|}|SrV)rr?)rps r generate_grammarrs!!A >>  r N)r) rrrrGrammarrobjectrrurvrr r r rs '&&&&&&&&&     '/   E9E9E9E9E9fE9E9E9N (((((v(((#####v###Jr