KMa5@sddlmZmZmZGdddejZGdddeZGdddeZGdd d eZ d d d Z d S))grammartokentokenizec@seZdZdS) PgenGrammarN)__name__ __module__ __qualname__r r 7/opt/alt/python35/lib64/python3.5/lib2to3/pgen2/pgen.pyrs rc@seZdZdddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZdd d!Zd"d#Zd$d%ZdS)&ParserGeneratorNcCsd}|dkr't|}|j}||_||_tj|j|_|j|j \|_ |_ |dk r|i|_ |j dS)N)openclosefilenamestreamrgenerate_tokensreadline generatorgettokenparsedfas startsymbolfirst addfirstsets)selfrrZ close_streamr r r __init__ s        zParserGenerator.__init__c Cst}t|jj}|j|j|j|jd|jx;|D]3}dt|j }||j |<||j |.closurecsft|tst||kr%dSd||r%)r3rTr4r5)rUr r rUs   z,ParserGenerator.make_dfa..addclosure) r<rWr>DFAStatenfasetr% setdefaultr$r&r'addarc) rr-finishrVr+r3r%Znfastater4r5rYstr )rUr rPs&  !  zParserGenerator.make_dfac Cstd||g}xt|D]\}}td|||krJdpMdx|jD]t\}}||kr|j|} nt|} |j||dkrtd| q[td|| fq[Wq#WdS)NzDump of NFA forz Statez(final)z -> %dz %s -> %d)print enumerater%r)r"r') rr0r-r\Ztodor1r3r4r5jr r r dump_nfas  "    zParserGenerator.dump_nfacCstd|x|t|D]n\}}td||jr>dpAdx@t|jjD])\}}td||j|fq[WqWdS)NzDump of DFA forz Statez(final)r^z %s -> %d)r_r`r*r$r%r&r))rr0r2r1r3r4r5r r r dump_dfas  "zParserGenerator.dump_dfacCsd}x|rd}xt|D]u\}}xft|dt|D]K}||}||krH||=x|D]}|j||qrWd}PqHWq"Wq WdS)NTFr)r`ranger" unifystate)rr2Zchangesr1Zstate_iraZstate_jr3r r r rQs     zParserGenerator.simplify_dfacCs|j\}}|jdkr+||fSt}t}|j||j|xI|jdkr|j|j\}}|j||j|qZW||fSdS)N|) parse_altrDrWr[r)rrRrSZaaZzzr r r rOs       zParserGenerator.parse_rhscCsr|j\}}xS|jdks?|jtjtjfkrg|j\}}|j||}qW||fS)N([)rhri) parse_itemrDrJrrCSTRINGr[)rrRbr.dr r r rg s  zParserGenerator.parse_altcCs|jdkrU|j|j\}}|jtjd|j|||fS|j\}}|j}|dkr||fS|j|j||dkr||fS||fSdS)Nri]+*)rorp)rDrrOrMrrNr[ parse_atom)rrRrSrDr r r rjs          zParserGenerator.parse_itemcCs|jdkrH|j|j\}}|jtjd||fS|jtjtjfkrt }t }|j ||j|j||fS|j d|j|jdS)Nrh)z+expected (...) or NAME or STRING, got %s/%s) rDrrOrMrrNrJrCrkrWr[ raise_error)rrRrSr r r rq(s       zParserGenerator.parse_atomcCs`|j|ks*|dk rI|j|krI|jd|||j|j|j}|j|S)Nzexpected %s/%s, got %s/%s)rJrDrsr)rrJrDr r r rM9s *   zParserGenerator.expectcCsit|j}x/|dtjtjfkr@t|j}qW|\|_|_|_|_|_ dS)Nr) r5rrCOMMENTNLrJrDZbeginendline)rtupr r r rAszParserGenerator.gettokenc Gsw|rDy||}Wn-dj|gttt|}YnXt||j|jd|jd|jfdS)N rr)joinrmapstr SyntaxErrorrrvrw)rmsgargsr r r rsHs*zParserGenerator.raise_error)rrrrr6r,r(rrErrPrbrcrQrOrgrjrqrMrrsr r r r r s$   .    $       r c@s+eZdZddZdddZdS)rWcCs g|_dS)N)r%)rr r r rSszNFAState.__init__NcCsP|dks!t|ts!tt|ts6t|jj||fdS)N)r<r|r>rWr%r')rr5r4r r r r[Vs!zNFAState.addarc)rrrrr[r r r r rWQs  rWc@sFeZdZddZddZddZddZd Zd S) rXcCspt|tstttt|ts6tt|tsKt||_||k|_i|_dS)N) r<dictr>r5iterrWrYr*r%)rrYfinalr r r r]s ! zDFAState.__init__cCsPt|tst||jks*tt|ts?t||j|r%rX)rr5r4r r r r[eszDFAState.addarccCs=x6|jjD]%\}}||kr||j|r*r"r%r&get)rotherr4r5r r r __eq__pszDFAState.__eq__N)rrrrr[rer__hash__r r r r rX[s     rXz Grammar.txtcCst|}|jS)N)r r6)rpr r r generate_grammars rN) r^rrrZGrammarrobjectr rWrXrr r r r s H %