o Šbc6ã@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 ú)/usr/lib/python3.10/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)'ÚParserGeneratorNcCspd}|durt|dd}|j}||_||_t |j¡|_| ¡|  ¡\|_ |_ |dur/|ƒi|_ |  ¡dS)Nzutf-8)Úencoding)ÚopenÚcloseÚfilenameÚstreamrÚgenerate_tokensÚreadlineÚ generatorÚgettokenÚparseÚdfasÚ startsymbolÚfirstÚ addfirstsets)ÚselfrrÚ close_streamr r r Ú__init__ s  zParserGenerator.__init__c Cstƒ}t|j ¡ƒ}| ¡| |j¡| d|j¡|D]}dt|j ƒ}||j |<||j |<q|D]P}|j|}g}|D]0}g}t |j   ¡ƒD]\} } | | || ¡| | ¡f¡qI|jri| d| |¡f¡| |¡q>|j |¡|| ||¡f|j|j |<q3|j |j|_|S)Néé)rÚlistrÚkeysÚsortÚremoverÚinsertÚlenÚ symbol2numberÚ 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+)rr1r3Úrawfirstrr7Úilabelr r r r/4s    zParserGenerator.make_firstcCsRt|jƒ}|d ¡r]||jvr,||jvr|j|S|j |j|df¡||j|<|Stt|dƒ}t|t ƒs;J|ƒ‚|tj vsDJ|ƒ‚||j vrN|j |S|j |df¡||j |<|S|ddvsgJ|ƒ‚t |ƒ}|d ¡r‹||j vr{|j |S|j tj|f¡||j |<|Stj|}||j vrš|j |S|j |df¡||j |<|S)Nr)ú"ú')r$ÚlabelsÚisalphar%Ú symbol2labelr*ÚgetattrrÚ isinstanceÚintÚtok_nameÚtokensÚevalÚkeywordsÚNAMErÚopmap)rr1r7r<ÚitokenÚvaluer r r r+=s<                  zParserGenerator.make_labelcCs8t|j ¡ƒ}| ¡|D] }||jvr| |¡q dS©N)rrr r!rÚ calcfirst)rr2r3r r r rks  €þzParserGenerator.addfirstsetsc Csþ|j|}d|j|<|d}i}i}|j ¡D]<\}}||jvrI||jvr5|j|}|dur4td|ƒ‚n | |¡|j|}| |¡|||<qd||<|di||<qi} | ¡D]\}} | D]} | | vrrtd|| || | fƒ‚|| | <q`qZ||j|<dS)Nrzrecursion for rule %rrzArule %s is ambiguous; %s is in the first sets of %s as well as %s)rrr(r)Ú ValueErrorrNÚupdate) rr3r5r6ÚtotalsetÚ overlapcheckr7r8ÚfsetÚinverseÚitsfirstÚsymbolr r r rNss8      ÿ    þ ûzParserGenerator.calcfirstc Cs´i}d}|jtjkrV|jtjkr| ¡|jtjks| tj¡}| tjd¡| ¡\}}| tj¡|  ||¡}t |ƒ}|  |¡t |ƒ}|||<|durP|}|jtjks ||fS)Nú:) ÚtyperÚ ENDMARKERÚNEWLINErÚexpectrIÚOPÚ parse_rhsÚmake_dfar$Ú simplify_dfa) rrrr3ÚaÚzr5ÚoldlenÚnewlenr r r r‘s&   ÿ      ïzParserGenerator.parsec sÚt|tƒsJ‚t|tƒsJ‚‡fdd„}‡fdd„‰t||ƒ|ƒg}|D]F}i}|jD]}|jD]\}} |durAˆ| | |i¡ƒq0q+t| ¡ƒD] \}} |D] } | j| krXn qOt| |ƒ} | | ¡|  | |¡qIq$|S)Ncsi}ˆ||ƒ|SrMr )r6Úbase©Ú addclosurer r Úclosure°s z)ParserGenerator.make_dfa..closurecsHt|tƒsJ‚||vr dSd||<|jD] \}}|dur!ˆ||ƒqdSr:)rCÚNFAStater()r6rdr7r8rer r rf´s €þz,ParserGenerator.make_dfa..addclosure) rCrhÚDFAStateÚnfasetr(Ú setdefaultr'r)r*Úaddarc) rr0Úfinishrgr.r6r(Únfastater7r8rjÚstr rer r^©s.   €þ ÿ  ùzParserGenerator.make_dfac Csštd|ƒ|g}t|ƒD]>\}}td|||urdpdƒ|jD]*\}}||vr-| |¡} n t|ƒ} | |¡|durAtd| ƒqtd|| fƒqq dS)NzDump of NFA forú Stateú(final)Úz -> %dú %s -> %d)ÚprintÚ enumerater(r,r$r*) rr3r0rmÚtodor4r6r7r8Újr r r Údump_nfaÍs   ÷þzParserGenerator.dump_nfacCsdtd|ƒt|ƒD]&\}}td||jrdpdƒt|j ¡ƒD]\}}td|| |¡fƒqq dS)NzDump of DFA forrprqrrrs)rtrur-r'r(r)r,)rr3r5r4r6r7r8r r r Údump_dfaÝs ÿþzParserGenerator.dump_dfacCsvd}|r9d}t|ƒD]*\}}t|dt|ƒƒD]}||}||kr3||=|D]}| ||¡q&d}nqq |sdSdS)NTFr)ruÚranger$Ú unifystate)rr5Úchangesr4Ústate_irwÚstate_jr6r r r r_äsú€ ûzParserGenerator.simplify_dfacCs‚| ¡\}}|jdkr||fStƒ}tƒ}| |¡| |¡|jdkr=| ¡| ¡\}}| |¡| |¡|jdks$||fS)Nú|)Ú parse_altrLrhrlr)rr`raÚaaÚzzr r r r]ùs         üzParserGenerator.parse_rhscCsf| ¡\}}|jdvs|jtjtjfvr/| ¡\}}| |¡|}|jdvs|jtjtjfvs||fS)N)ú(ú[)Ú parse_itemrLrXrrIÚSTRINGrl)rr`Úbr1Údr r r r€ s     üzParserGenerator.parse_altcCsŠ|jdkr| ¡| ¡\}}| tjd¡| |¡||fS| ¡\}}|j}|dvr0||fS| ¡| |¡|dkrA||fS||fS)Nr„ú])ú+Ú*rŠ)rLrr]r[rr\rlÚ parse_atom)rr`rarLr r r r…s     zParserGenerator.parse_itemcCs†|jdkr| ¡| ¡\}}| tjd¡||fS|jtjtjfvr8t ƒ}t ƒ}|  ||j¡| ¡||fS|  d|j|j¡dS)Nrƒú)z+expected (...) or NAME or STRING, got %s/%s) rLrr]r[rr\rXrIr†rhrlÚ raise_error)rr`rar r r rŒ(s  ÿzParserGenerator.parse_atomcCsD|j|ks|dur|j|kr| d|||j|j¡|j}| ¡|S)Nzexpected %s/%s, got %s/%s)rXrLrŽr)rrXrLr r r r[9s ÿzParserGenerator.expectcCsXt|jƒ}|dtjtjfvrt|jƒ}|dtjtjfvs|\|_|_|_|_|_ dS)Nr) r8rrÚCOMMENTÚNLrXrLÚbeginÚendÚline)rÚtupr r r rAs  ÿzParserGenerator.gettokenc GsV|rz||}Wnd |gttt|ƒƒ¡}Yt||j|jd|jd|jfƒ‚)Nú rr)ÚjoinrÚmapÚstrÚ SyntaxErrorrr’r“)rÚmsgÚargsr r r rŽHs  ÿzParserGenerator.raise_errorrM)rrrrr9r/r+rrNrr^rxryr_r]r€r…rŒr[rrŽr r r r r s&  .$   r c@seZdZdd„Zddd„ZdS)rhcCs g|_dSrM)r()rr r r rSs zNFAState.__init__NcCs8|dus t|tƒs J‚t|tƒsJ‚|j ||f¡dSrM)rCr˜rhr(r*©rr8r7r r r rlVszNFAState.addarcrM)rrrrrlr r r r rhQsrhc@s0eZdZdd„Zdd„Zdd„Zdd„Zd Zd S) ricCsLt|tƒsJ‚ttt|ƒƒtƒsJ‚t|tƒsJ‚||_||v|_i|_dSrM)rCÚdictr8Úiterrhrjr-r()rrjÚfinalr r r r]s   zDFAState.__init__cCs8t|tƒsJ‚||jvsJ‚t|tƒsJ‚||j|<dSrM)rCr˜r(rirœr r r rleszDFAState.addarccCs*|j ¡D] \}}||ur||j|<qdSrM)r(r))rÚoldÚnewr7r8r r r r{ks  €þzDFAState.unifystatecCsdt|tƒsJ‚|j|jkrdSt|jƒt|jƒkrdS|j ¡D]\}}||j |¡ur/dSq dS)NFT)rCrir-r$r(r)Úget)rÚotherr7r8r r r Ú__eq__ps ÿzDFAState.__eq__N)rrrrrlr{r¤Ú__hash__r r r r ri[s riú Grammar.txtcCst|ƒ}| ¡SrM)r r9)rÚpr r r Úgenerate_grammar€sr¨N)r¦) rrrrrÚGrammarrÚobjectr rhrir¨r r r r ÚsI %