o bc6@sdddlmZmZmZGdddejZGdddeZGdddeZGdd d eZ dd d Z d S))grammartokentokenizec@s eZdZdS) PgenGrammarN)__name__ __module__ __qualname__r r )/usr/lib/python3.10/lib2to3/pgen2/pgen.pyrsrc@seZdZd&ddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd&d d!Zd"d#Zd$d%ZdS)'ParserGeneratorNcCspd}|durt|dd}|j}||_||_t|j|_|| \|_ |_ |dur/|i|_ | dS)Nzutf-8)encoding)openclosefilenamestreamrgenerate_tokensreadline generatorgettokenparsedfas startsymbolfirst 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]\} } |||| || fqI|jri|d||f||q>|j|||||f|j|j |<q3|j |j|_|S)N)rlistrkeyssortremoverinsertlen symbol2number number2symbolsortedarcsitemsappend make_labelindexisfinalstates make_firststart) rcnamesnameidfar.stater(labelnextr r r make_grammars.      zParserGenerator.make_grammarcCs4|j|}i}t|D] }|||}d||<q |SNr)rr'r+)rr1r3rawfirstrr7ilabelr r r r/4s    zParserGenerator.make_firstcCsRt|j}|dr]||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 |}|dr||j vr{|j |S|jtj|f||j |<|Stj|}||j vr|j |S|j|df||j |<|S)Nr)"')r$labelsisalphar% symbol2labelr*getattrr isinstanceinttok_nametokensevalkeywordsNAMEropmap)rr1r7r<itokenvaluer r r r+=s<                  zParserGenerator.make_labelcCs8t|j}||D] }||jvr||q dSN)rrr r!r calcfirst)rr2r3r r r rks  zParserGenerator.addfirstsetsc Cs|j|}d|j|<|d}i}i}|jD]<\}}||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) ValueErrorrNupdate) rr3r5r6totalset overlapcheckr7r8fsetinverseitsfirstsymbolr r r rNss8           zParserGenerator.calcfirstc Csi}d}|jtjkrV|jtjkr||jtjks|tj}|tjd|\}}|tj| ||}t |}| |t |}|||<|durP|}|jtjks ||fS)N:) typer ENDMARKERNEWLINErexpectrIOP parse_rhsmake_dfar$ simplify_dfa) rrrr3azr5oldlennewlenr r r rs&        zParserGenerator.parsec st|tsJt|tsJfdd}fddt|||g}|D]F}i}|jD]}|jD]\}} |durA| ||iq0q+t|D] \}} |D] } | j| krXn qOt| |} || | | |qIq$|S)Ncsi}|||SrMr )r6base addclosurer r closures z)ParserGenerator.make_dfa..closurecsHt|tsJ||vr dSd||<|jD] \}}|dur!||qdSr:)rCNFAStater()r6rdr7r8rer r rfs z,ParserGenerator.make_dfa..addclosure) rCrhDFAStatenfasetr( setdefaultr'r)r*addarc) rr0finishrgr.r6r(nfastater7r8rjstr rer r^s.      zParserGenerator.make_dfac Cstd||g}t|D]>\}}td|||urdpd|jD]*\}}||vr-||} n t|} |||durAtd| qtd|| fqq dS)NzDump of NFA for State(final)z -> %d %s -> %d)print enumerater(r,r$r*) rr3r0rmtodor4r6r7r8jr r r dump_nfas   zParserGenerator.dump_nfacCsdtd|t|D]&\}}td||jrdpdt|jD]\}}td|||fqq dS)NzDump of DFA forrprqrrrs)rtrur-r'r(r)r,)rr3r5r4r6r7r8r r r dump_dfas zParserGenerator.dump_dfacCsvd}|r9d}t|D]*\}}t|dt|D]}||}||kr3||=|D]}|||q&d}nqq |sdSdS)NTFr)ruranger$ unifystate)rr5changesr4state_irwstate_jr6r r r r_s zParserGenerator.simplify_dfacCs|\}}|jdkr||fSt}t}|||||jdkr=||\}}|||||jdks$||fS)N|) parse_altrLrhrlr)rr`raaazzr r r r]s         zParserGenerator.parse_rhscCsf|\}}|jdvs|jtjtjfvr/|\}}|||}|jdvs|jtjtjfvs||fS)N)([) parse_itemrLrXrrISTRINGrl)rr`br1dr 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 rs     zParserGenerator.parse_itemcCs|jdkr||\}}|tjd||fS|jtjtjfvr8t }t }| ||j|||fS| d|j|jdS)Nr)z+expected (...) or NAME or STRING, got %s/%s) rLrr]r[rr\rXrIrrhrl 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)rXrLrr)rrXrLr r r r[9s zParserGenerator.expectcCsXt|j}|dtjtjfvrt|j}|dtjtjfvs|\|_|_|_|_|_ dS)Nr) r8rrCOMMENTNLrXrLbeginendline)rtupr r r rAs  zParserGenerator.gettokenc GsV|rz||}Wnd|gttt|}Yt||j|jd|jd|jf)N rr)joinrmapstr SyntaxErrorrrr)rmsgargsr r r rHs  zParserGenerator.raise_errorrM)rrrrr9r/r+rrNrr^rxryr_r]rrrr[rrr r r r r s&  .$   r c@seZdZddZdddZdS)rhcCs g|_dSrM)r()rr r r rSs zNFAState.__init__NcCs8|dus t|ts Jt|tsJ|j||fdSrM)rCrrhr(r*rr8r7r r r rlVszNFAState.addarcrM)rrrrrlr r r r rhQsrhc@s0eZdZddZddZddZddZd Zd S) ricCsLt|tsJttt|tsJt|tsJ||_||v|_i|_dSrM)rCdictr8iterrhrjr-r()rrjfinalr r r r]s   zDFAState.__init__cCs8t|tsJ||jvsJt|tsJ||j|<dSrM)rCrr(rirr r r rleszDFAState.addarccCs*|jD] \}}||ur||j|<qdSrM)r(r))roldnewr7r8r r r r{ks  zDFAState.unifystatecCsdt|tsJ|j|jkrdSt|jt|jkrdS|jD]\}}||j|ur/dSq dS)NFT)rCrir-r$r(r)get)rotherr7r8r r r __eq__ps zDFAState.__eq__N)rrrrrlr{r__hash__r r r r ri[s ri Grammar.txtcCst|}|SrM)r r9)rpr r r generate_grammarsrN)r) rrrrrGrammarrobjectr rhrirr r r r sI %