U iÛfô5ã@sdddlmZmZmZGdd„dejƒZGdd„deƒZGdd„deƒZGdd „d eƒZ dd d „Z d S)é)ÚgrammarÚtokenÚtokenizec@s eZdZdS)Ú PgenGrammarN)Ú__name__Ú __module__Ú __qualname__©r r ú7/opt/alt/python38/lib64/python3.8/lib2to3/pgen2/pgen.pyrsrc@s eZdZd&dd„Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zd'd d!„Zd"d#„Zd$d%„ZdS)(ÚParserGeneratorNcCsld}|dkrt|ƒ}|j}||_||_t |j¡|_| ¡|  ¡\|_ |_ |dk rZ|ƒi|_ |  ¡dS©N)ÚopenÚcloseÚfilenameÚstreamrÚgenerate_tokensÚreadlineÚ generatorÚgettokenÚparseÚdfasÚ startsymbolÚfirstÚ addfirstsets)ÚselfrrZ close_streamr r r Ú__init__ szParserGenerator.__init__c Cstƒ}t|j ¡ƒ}| ¡| |j¡| d|j¡|D]&}dt|j ƒ}||j |<||j |<q:|D] }|j|}g}|D]`}g}t |j   ¡ƒD]$\} } | | || ¡| | ¡f¡q’|jrÒ| d| |¡f¡| |¡q||j |¡|| ||¡f|j|j |<qf|j |j|_|S)Néé)rÚlistrÚkeysÚsortÚremoverÚinsertÚlenÚ symbol2numberZ number2symbolÚsortedÚarcsÚitemsÚappendÚ make_labelÚindexÚisfinalÚstatesÚ make_firstÚstart) rÚcÚnamesÚnameÚiÚdfar,Ústater&ÚlabelÚnextr r r Ú make_grammars.      zParserGenerator.make_grammarcCs4|j|}i}t|ƒD]}| ||¡}d||<q|S©Nr)rr%r))rr/r1Zrawfirstrr5Úilabelr r r r-4s     zParserGenerator.make_firstcCsbt|jƒ}|d ¡r¾||jkrZ||jkr4|j|S|j |j|df¡||j|<|Snbtt|dƒ}t|t ƒsxt |ƒ‚|tj ksŠt |ƒ‚||j krž|j |S|j |df¡||j |<|Sn |ddksÒt |ƒ‚t |ƒ}|d ¡r ||jkrþ|j|S|j tj|f¡||j|<|Sn>tj|}||j kr@|j |S|j |df¡||j |<|SdS)Nr)ú"ú')r#ÚlabelsÚisalphar$Z symbol2labelr(ÚgetattrrÚ isinstanceÚintÚAssertionErrorÚtok_nameÚtokensÚevalÚkeywordsÚNAMErZopmap)rr/r5r9ZitokenÚvaluer r r r)=s<                 zParserGenerator.make_labelcCs8t|j ¡ƒ}| ¡|D]}||jkr| |¡qdSr )rrrr rÚ calcfirst)rr0r1r r r rks  zParserGenerator.addfirstsetsc Csþ|j|}d|j|<|d}i}i}|j ¡D]x\}}||jkr’||jkrj|j|}|dkr~td|ƒ‚n| |¡|j|}| |¡|||<q.d||<|di||<q.i} | ¡D]:\}} | D],} | | krätd|| || | fƒ‚|| | <qÀq´||j|<dS)Nrzrecursion for rule %rrzArule %s is ambiguous; %s is in the first sets of %s as well as %s)rrr&r'Ú ValueErrorrHÚupdate) rr1r3r4ZtotalsetZ overlapcheckr5r6ÚfsetZinverseZitsfirstZsymbolr r r rHss4         þ zParserGenerator.calcfirstc Cs i}d}|jtjkr˜|jtjkr*| ¡q| tj¡}| tjd¡| ¡\}}| tj¡|  ||¡}t |ƒ}|  |¡t |ƒ}|||<|dkr|}q||fS)Nú:) ÚtyperÚ ENDMARKERÚNEWLINErÚexpectrFÚOPÚ parse_rhsÚmake_dfar#Ú simplify_dfa) rrrr1ÚaÚzr3ZoldlenZnewlenr r r r‘s"        zParserGenerator.parsec sÚt|tƒst‚t|tƒst‚‡fdd„}‡fdd„‰t||ƒ|ƒg}|D]Œ}i}|jD].}|jD]"\}} |dk r`ˆ| | |i¡ƒq`qVt| ¡ƒD]@\}} |D]} | j| kržqÆqžt| |ƒ} |  | ¡|  | |¡q’qH|S)Ncsi}ˆ||ƒ|Sr r )r4Úbase©Ú addclosurer r Úclosure°s z)ParserGenerator.make_dfa..closurecsHt|tƒst‚||krdSd||<|jD]\}}|dkr(ˆ||ƒq(dSr8)r?ÚNFAStaterAr&)r4rWr5r6rXr r rY´sz,ParserGenerator.make_dfa..addclosure) r?r[rAÚDFAStateÚnfasetr&Ú setdefaultr%r'r(Úaddarc) rr.ÚfinishrZr,r4r&Znfastater5r6r]Ústr rXr rS©s&      zParserGenerator.make_dfac Csštd|ƒ|g}t|ƒD]|\}}td|||kr2dp4dƒ|jD]T\}}||krZ| |¡} nt|ƒ} | |¡|dkr‚td| ƒq>td|| fƒq>qdS)NzDump of NFA forú Stateú(final)Úz -> %dú %s -> %d)ÚprintÚ enumerater&r*r#r() rr1r.r`Ztodor2r4r5r6Újr r r Údump_nfaÍs   zParserGenerator.dump_nfacCsdtd|ƒt|ƒD]L\}}td||jr*dp,dƒt|j ¡ƒD]\}}td|| |¡fƒq>qdS)NzDump of DFA forrbrcrdre)rfrgr+r%r&r'r*)rr1r3r2r4r5r6r r r Údump_dfaÝs  zParserGenerator.dump_dfacCspd}|rld}t|ƒD]T\}}t|dt|ƒƒD]8}||}||kr.||=|D]}| ||¡qLd}qq.qqdS)NTFr)rgÚranger#Ú unifystate)rr3Zchangesr2Zstate_irhZstate_jr4r r r rTäszParserGenerator.simplify_dfacCs~| ¡\}}|jdkr||fStƒ}tƒ}| |¡| |¡|jdkrr| ¡| ¡\}}| |¡| |¡q>||fSdS)Nú|)Ú parse_altrGr[r_r)rrUrVZaaZzzr r r rRùs        zParserGenerator.parse_rhscCsL| ¡\}}|jdks(|jtjtjfkrD| ¡\}}| |¡|}q ||fS)N)ú(ú[)Ú parse_itemrGrMrrFÚSTRINGr_)rrUÚbr/Údr r r rn s  ÿ  zParserGenerator.parse_altcCsŽ|jdkr>| ¡| ¡\}}| tjd¡| |¡||fS| ¡\}}|j}|dkr`||fS| ¡| |¡|dkr‚||fS||fSdS)Nrpú])ú+Ú*rv)rGrrRrPrrQr_Ú parse_atom)rrUrVrGr r r rqs     zParserGenerator.parse_itemcCs†|jdkr4| ¡| ¡\}}| tjd¡||fS|jtjtjfkrpt ƒ}t ƒ}|  ||j¡| ¡||fS|  d|j|j¡dS)Nroú)z+expected (...) or NAME or STRING, got %s/%s) rGrrRrPrrQrMrFrrr[r_Ú raise_error)rrUrVr r r rx(s  ÿzParserGenerator.parse_atomcCsD|j|ks|dk r2|j|kr2| d|||j|j¡|j}| ¡|S)Nzexpected %s/%s, got %s/%s)rMrGrzr)rrMrGr r r rP9sÿzParserGenerator.expectcCsFt|jƒ}|dtjtjfkr*t|jƒ}q |\|_|_|_|_|_ dS)Nr) r6rrÚCOMMENTÚNLrMrGZbeginÚendÚline)rÚtupr r r rAs  zParserGenerator.gettokenc Gs^|r8z ||}Wn&d |gttt|ƒƒ¡}YnXt||j|jd|jd|jfƒ‚dS)Nú rr)ÚjoinrÚmapÚstrÚ SyntaxErrorrr}r~)rÚmsgÚargsr r r rzHs  ÿzParserGenerator.raise_error)N)N)rrrrr7r-r)rrHrrSrirjrTrRrnrqrxrPrrzr r r r r s$  .$  r c@seZdZdd„Zddd„ZdS)r[cCs g|_dSr )r&)rr r r rSszNFAState.__init__NcCs8|dkst|tƒst‚t|tƒs$t‚|j ||f¡dSr )r?rƒrAr[r&r(©rr6r5r r r r_VszNFAState.addarc)N)rrrrr_r r r r r[Qsr[c@s0eZdZdd„Zdd„Zdd„Zdd„Zd Zd S) r\cCsLt|tƒst‚ttt|ƒƒtƒs$t‚t|tƒs2t‚||_||k|_i|_dSr ) r?ÚdictrAr6Úiterr[r]r+r&)rr]Úfinalr r r r]s  zDFAState.__init__cCs8t|tƒst‚||jkst‚t|tƒs*t‚||j|<dSr )r?rƒrAr&r\r‡r r r r_eszDFAState.addarccCs*|j ¡D]\}}||kr ||j|<q dSr )r&r')rÚoldÚnewr5r6r r r rlkszDFAState.unifystatecCsdt|tƒst‚|j|jkrdSt|jƒt|jƒkr6dS|j ¡D]\}}||j |¡k r@dSq@dS)NFT)r?r\rAr+r#r&r'Úget)rÚotherr5r6r r r Ú__eq__ps zDFAState.__eq__N)rrrrr_rlrÚ__hash__r r r r r\[s r\ú Grammar.txtcCst|ƒ}| ¡Sr )r r7)rÚpr r r Úgenerate_grammar€sr“N)r‘) rdrrrZGrammarrÚobjectr r[r\r“r r r r ÚsI %