B ½9ã%Ëh²ã@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 ú5/opt/alt/python37/lib/python3.7/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 Cs*tƒ}t|j ¡ƒ}| ¡| |j¡| d|j¡x.|D]&}dt|j ƒ}||j |<||j |<qtt|dƒ}||jkrz|j|S|j |df¡||j|<|Snˆt |ƒ}|d ¡rä||j krÂ|j |S|j tj |f¡||j |<|Sn>t j |}||jkr|j|S|j |df¡||j|<|SdS)Nr)r"ÚlabelsÚisalphar#Z symbol2labelr'ÚgetattrrÚtokensÚevalÚkeywordsÚNAMErZopmap)rr.r4r7ZitokenÚvaluer r r r(=s6                  zParserGenerator.make_labelcCs<t|j ¡ƒ}| ¡x |D]}||jkr| |¡qWdS)N)rrrrrÚ calcfirst)rr/r0r r r rks   zParserGenerator.addfirstsetsc Cs |j|}d|j|<|d}i}i}x†|j ¡D]x\}}||jkr”||jkrl|j|}|dkr€td|ƒ‚n| |¡|j|}| |¡|||<q0d||<|di||<q0Wi} xJ| ¡D]>\}} x4| D],} | | krìtd|| || | fƒ‚|| | <qÈWqºW||j|<dS)Nrzrecursion for rule %rrzArule %s is ambiguous; %s is in the first sets of %s as well as %s)rrr%r&Ú ValueErrorr@Úupdate) rr0r2r3ZtotalsetZ overlapcheckr4r5ÚfsetZinverseZitsfirstÚsymbolr r r r@ss2          zParserGenerator.calcfirstc Cs¨i}d}x–|jtjkržx|jtjkr.| ¡qW| tj¡}| tjd¡| ¡\}}| tj¡|  ||¡}t |ƒ}|  |¡t |ƒ}|||<|dkr |}q W||fS)Nú:) ÚtyperÚ ENDMARKERÚNEWLINErÚexpectr>ÚOPÚ parse_rhsÚmake_dfar"Ú simplify_dfa) rrrr0ÚaÚzr2ZoldlenZnewlenr r r r‘s"      zParserGenerator.parsec sЇfdd„}‡fdd„‰t||ƒ|ƒg}x¢|D]š}i}x<|jD]2}x,|jD]"\}} |dk rJˆ| | |i¡ƒqJWq>WxRt| ¡ƒD]B\}} x,|D]} | j| krPqWt| |ƒ} | | ¡| | |¡q‚Wq.W|S)Ncsi}ˆ||ƒ|S)Nr )r3Úbase)Ú addclosurer r Úclosure°s z)ParserGenerator.make_dfa..closurecs>||kr dSd||<x$|jD]\}}|dkrˆ||ƒqWdS)Nr)r%)r3rPr4r5)rQr r rQ´s z,ParserGenerator.make_dfa..addclosure)ÚDFAStateÚnfasetr%Ú setdefaultr$r&r'Úaddarc) rr-ÚfinishrRr+r3r%Znfastater4r5rTÚstr )rQr rL©s"        zParserGenerator.make_dfac Cs¢td|ƒ|g}xŒt|ƒD]€\}}td|||kr4dp6dƒx^|jD]T\}}||kr^| |¡} nt|ƒ} | |¡|dkr†td| ƒqBtd|| fƒqBWqWdS)NzDump of NFA forz Statez(final)Úz -> %dz %s -> %d)ÚprintÚ enumerater%r)r"r') rr0r-rWZtodor1r3r4r5Újr r r Údump_nfaÍs   zParserGenerator.dump_nfacCsltd|ƒx\t|ƒD]P\}}td||jr,dp.dƒx0t|j ¡ƒD]\}}td|| |¡fƒqBWqWdS)NzDump of DFA forz Statez(final)rYz %s -> %d)rZr[r*r$r%r&r))rr0r2r1r3r4r5r r r Údump_dfaÝs  zParserGenerator.dump_dfacCs~d}xt|rxd}xft|ƒD]Z\}}xPt|dt|ƒƒD]:}||}||kr4||=x|D]}| ||¡qTWd}Pq4WqWqWdS)NTFr)r[Úranger"Ú unifystate)rr2Zchangesr1Zstate_ir\Zstate_jr3r r r rMäs zParserGenerator.simplify_dfacCs‚| ¡\}}|jdkr||fStƒ}tƒ}| |¡| |¡x6|jdkrt| ¡| ¡\}}| |¡| |¡q@W||fSdS)Nú|)Ú parse_altr?ÚNFAStaterVr)rrNrOZaaZzzr r r rKùs       zParserGenerator.parse_rhscCsP| ¡\}}x:|jdks*|jtjtjfkrF| ¡\}}| |¡|}qW||fS)N)ú(ú[)Ú parse_itemr?rFrr>ÚSTRINGrV)rrNÚbr.Údr r r rb s    zParserGenerator.parse_altcCsŽ|jdkr>| ¡| ¡\}}| tjd¡| |¡||fS| ¡\}}|j}|dkr`||fS| ¡| |¡|dkr‚||fS||fSdS)Nreú])ú+Ú*rk)r?rrKrIrrJrVÚ parse_atom)rrNrOr?r r r rfs     zParserGenerator.parse_itemcCs†|jdkr4| ¡| ¡\}}| tjd¡||fS|jtjtjfkrpt ƒ}t ƒ}|  ||j¡| ¡||fS|  d|j|j¡dS)Nrdú)z+expected (...) or NAME or STRING, got %s/%s) r?rrKrIrrJrFr>rgrcrVÚ raise_error)rrNrOr r r rm(s  zParserGenerator.parse_atomcCsD|j|ks|dk r2|j|kr2| d|||j|j¡|j}| ¡|S)Nzexpected %s/%s, got %s/%s)rFr?ror)rrFr?r r r rI9s zParserGenerator.expectcCsJt|jƒ}x"|dtjtjfkr,t|jƒ}q W|\|_|_|_|_|_ dS)Nr) r5rrÚCOMMENTÚNLrFr?ZbeginÚendÚline)rÚtupr r r rAs zParserGenerator.gettokenc Gs^|r8y ||}Wn&d |gttt|ƒƒ¡}YnXt||j|jd|jd|jfƒ‚dS)Nú rr)ÚjoinrÚmapÚstrÚ SyntaxErrorrrrrs)rÚmsgÚargsr r r roHs  zParserGenerator.raise_error)N)N)rrrrr6r,r(rr@rrLr]r^rMrKrbrfrmrIrror r r r r s$  .$  r c@seZdZdd„Zddd„ZdS)rccCs g|_dS)N)r%)rr r r rSszNFAState.__init__NcCs|j ||f¡dS)N)r%r')rr5r4r r r rVVszNFAState.addarc)N)rrrrrVr r r r rcQsrcc@s0eZdZdd„Zdd„Zdd„Zdd„Zd Zd S) rScCs||_||k|_i|_dS)N)rTr*r%)rrTÚfinalr r r r]s zDFAState.__init__cCs||j|<dS)N)r%)rr5r4r r r rVeszDFAState.addarccCs.x(|j ¡D]\}}||kr ||j|<q WdS)N)r%r&)rÚoldÚnewr4r5r r r r`kszDFAState.unifystatecCsX|j|jkrdSt|jƒt|jƒkr(dSx*|j ¡D]\}}||j |¡k r4dSq4WdS)NFT)r*r"r%r&Úget)rÚotherr4r5r r r Ú__eq__ps zDFAState.__eq__N)rrrrrVr`rÚ__hash__r r r r rS[s rSú Grammar.txtcCst|ƒ}| ¡S)N)r r6)rÚpr r r Úgenerate_grammar€sr…N)rƒ) rYrrrZGrammarrÚobjectr rcrSr…r r r r ÚsI %