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ÚfsetZinverseZitsfirstZsymbolr 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%)r3rOr4r5)rPr r rP´s z,ParserGenerator.make_dfa..addclosure)ÚDFAStateÚnfasetr%Ú setdefaultr$r&r'Úaddarc) rr-ÚfinishrQr+r3r%Znfastater4r5rSÚstr )rPr rK©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-rVZtodor1r3r4r5Ú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)rXz %s -> %d)rYrZr*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)rZÚranger"Ú unifystate)rr2Zchangesr1Zstate_ir[Zstate_jr3r r r rLäs zParserGenerator.simplify_dfacCs‚| ¡\}}|jdkr||fStƒ}tƒ}| |¡| |¡x6|jdkrt| ¡| ¡\}}| |¡| |¡q@W||fSdS)Nú|)Ú parse_altr?ÚNFAStaterUr)rrMrNZaaZzzr r r rJùs       zParserGenerator.parse_rhscCsP| ¡\}}x:|jdks*|jtjtjfkrF| ¡\}}| |¡|}qW||fS)N)ú(ú[)Ú parse_itemr?rErr>ÚSTRINGrU)rrMÚbr.Údr r r ra s    zParserGenerator.parse_altcCsŽ|jdkr>| ¡| ¡\}}| tjd¡| |¡||fS| ¡\}}|j}|dkr`||fS| ¡| |¡|dkr‚||fS||fSdS)Nrdú])ú+Ú*rj)r?rrJrHrrIrUÚ parse_atom)rrMrNr?r r r res     zParserGenerator.parse_itemcCs†|jdkr4| ¡| ¡\}}| tjd¡||fS|jtjtjfkrpt ƒ}t ƒ}|  ||j¡| ¡||fS|  d|j|j¡dS)Nrcú)z+expected (...) or NAME or STRING, got %s/%s) r?rrJrHrrIrEr>rfrbrUÚ raise_error)rrMrNr r r rl(s  zParserGenerator.parse_atomcCsD|j|ks|dk r2|j|kr2| d|||j|j¡|j}| ¡|S)Nzexpected %s/%s, got %s/%s)rEr?rnr)rrEr?r r r rH9s zParserGenerator.expectcCsJt|jƒ}x"|dtjtjfkr,t|jƒ}q W|\|_|_|_|_|_ dS)Nr) r5rrÚCOMMENTÚNLrEr?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Ú SyntaxErrorrrqrr)rÚmsgÚargsr r r rnHs  zParserGenerator.raise_error)N)N)rrrrr6r,r(rr@rrKr\r]rLrJrarerlrHrrnr r r r r s$  .$  r c@seZdZdd„Zddd„ZdS)rbcCs g|_dS)N)r%)rr r r rSszNFAState.__init__NcCs|j ||f¡dS)N)r%r')rr5r4r r r rUVszNFAState.addarc)N)rrrrrUr r r r rbQsrbc@s0eZdZdd„Zdd„Zdd„Zdd„Zd Zd S) rRcCs||_||k|_i|_dS)N)rSr*r%)rrSÚfinalr r r r]s zDFAState.__init__cCs||j|<dS)N)r%)rr5r4r r r rUeszDFAState.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)rrrrrUr_r€Ú__hash__r r r r rR[s rRú Grammar.txtcCst|ƒ}| ¡S)N)r r6)rÚpr r r Úgenerate_grammar€sr„N)r‚) rXrrrZGrammarrÚobjectr rbrRr„r r r r ÚsI %