U V} @sddlZddlZddlZddlZddlZddlZddlZdZdZ dZ dZ dZ dZ dZdZd ZdZejddkrteZneZejZGd d d eZGd d d eZGdddeZddZddZdada da!dZ"ddZ#ddZ$ddZ%ddZ&GdddZ'Gdd d Z(Gd!d"d"Z)e*d#Z+Gd$d%d%eZ,Gd&d'd'eZ-Gd(d)d)eZ.d*d+Z/Gd,d-d-eZ0Gd.d/d/eZ1Gd0d1d1eZ2Gd2d3d3eZ3d4d5Z4d6d7Z5Gd8d9d9eZ6Gd:d;d;e3Z7dd?Z9Gd@dAdAeZ:de de dddde ddddf dBdCZ;dS)DNz3.8Tz parser.outparsetabLALRF(c@s4eZdZddZddZeZddZddZeZd S) PlyLoggercCs ||_dSN)f)selfrr /yacc.py__init__nszPlyLogger.__init__cOs|j||ddS)N rwriter msgargskwargsr r r debugqszPlyLogger.debugcOs|jd||ddS)Nz WARNING: r rrr r r warningvszPlyLogger.warningcOs|jd||ddS)NzERROR: r rrr r r erroryszPlyLogger.errorN) __name__ __module__ __qualname__r rinforrZcriticalr r r r rms rc@seZdZddZddZdS) NullLoggercCs|Srr )r namer r r __getattribute__szNullLogger.__getattribute__cOs|Srr )r rrr r r __call__szNullLogger.__call__N)rrrrrr r r r rsrc@s eZdZdS) YaccErrorNrrrr r r r rsrcCsPt|}d|krt|}t|tkr4|dtd}dt|jt||f}|S)Nr z ...z<%s @ 0x%x> (%s))reprlen resultlimittyperid)rrepr_strresultr r r format_results r)cCsBt|}d|krt|}t|dkr(|Sdt|jt|fSdS)Nr z <%s @ 0x%x>)r!r"r$rr%)r&r'r r r format_stack_entrys  r+aPLY: Don't use global functions errok(), token(), and restart() in p_error(). Instead, invoke the methods on the associated parser instance: def p_error(p): ... # Use parser.errok(), parser.token(), parser.restart() ... parser = yacc.yacc() cCstttSr)warningswarn_warnmsg_errokr r r r erroks r0cCstttSr)r,r-r._restartr r r r restarts r2cCstttSr)r,r-r._tokenr r r r tokens r4cCs>|ja|ja|ja||}z bbbWntk r8YnX|Sr)r0r/r4r3r2r1 NameError) errorfuncr4parserr&r r r call_errorfuncs r8c@seZdZddZddZdS) YaccSymbolcCs|jSrr$r r r r __str__szYaccSymbol.__str__cCst|Srstrr;r r r __repr__szYaccSymbol.__repr__N)rrrr<r?r r r r r9sr9c@sfeZdZdddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ dS)YaccProductionNcCs||_||_d|_d|_dSr)slicestacklexerr7)r srBr r r r szYaccProduction.__init__cCsBt|trdd|j|DS|dkr2|j|jS|j|jSdS)NcSsg|] }|jqSr value.0rDr r r sz.YaccProduction.__getitem__..r) isinstancerArFrBr nr r r __getitem__s   zYaccProduction.__getitem__cCs||j|_dSr)rArF)r rLvr r r __setitem__szYaccProduction.__setitem__cCsdd|j||DS)NcSsg|] }|jqSr rErGr r r rIsz/YaccProduction.__getslice__..)rA)r ijr r r __getslice__szYaccProduction.__getslice__cCs t|jSr)r"rAr;r r r __len__szYaccProduction.__len__cCst|j|ddS)NlinenorgetattrrArKr r r rTszYaccProduction.linenocCs||j|_dSr)rArT)r rLrTr r r set_linenoszYaccProduction.set_linenocCs,t|j|dd}t|j|d|}||fS)NrTr endlinenorU)r rL startlineZendliner r r linespanszYaccProduction.linespancCst|j|ddS)NlexposrrUrKr r r r[ szYaccProduction.lexposcCs,t|j|dd}t|j|d|}||fS)Nr[r endlexposrU)r rLstartposendposr r r lexspanszYaccProduction.lexspancCstdSr) SyntaxErrorr;r r r rszYaccProduction.error)N)rrrr rMrOrRrSrTrWrZr[r_rr r r r r@s r@c@s\eZdZddZddZddZddZd d Zdd dZdddZ dddZ dddZ d S)LRParsercCs0|j|_|j|_|j|_||_|d|_dSNT) lr_productions productions lr_actionactionlr_gotogotor6set_defaulted_stateserrorok)r ZlrtabZerrorfr r r r s zLRParser.__init__cCs d|_dSrb)rjr;r r r r0&szLRParser.errokcCs@|jdd=|jdd=t}d|_|j||jddS)N$endr) statestacksymstackr9r$append)r symr r r r2)s    zLRParser.restartcCsPi|_|jD]:\}}t|}t|dkr|ddkr|d|j|<qdSNr)defaulted_statesrfitemslistvaluesr")r stateactionsZrulesr r r ri9s  zLRParser.set_defaulted_statescCs i|_dSr)rrr;r r r disable_defaulted_states@sz!LRParser.disable_defaulted_statesNFcCsZ|str.t|trttj}||||||S|rD||||||S||||||SdSr) yaccdevelrJintrsysstderr parsedebugparseoptparseopt_notrack)r inputrCrtracking tokenfuncr r r parseCs  zLRParser.parsec Csd}g}|j}|j} |j} |j} td} d} |d|sLddlm}|j}|| _|| _ |dk rj| ||dkrz|j }n|}||_ g}||_ g}||_ || _d}|dt}d|_||d}|d|d||| kr(|s|s|}n|}|st}d|_|j}|||}n| |}|d|| |d d d d d |Dddt|f|dk rj|dkr|||}|d|||d}| r| d8} q|dkr.| | }|j}|j}t}||_d|_|r<|d|jdddd || dDd| |d||n|d|jg| |d||rv|| dd}||d<|r|d}|j|_|j|_|d}t|d|j|_t|d|j|_|| _ z^|| d=|| d=|!| |dt"| d||| |d|}||Wqt#k rp|||||d}d|_|}t$} d|_%YqXqn|r|j|_|j|_|g}|| _ zF|!| |dt"| d||| |d|}||Wqt#k r*|||||d}d|_|}t$} d|_%YqXq|dkrj|d}t|dd}|dt"||d|S|dkr|&dd d dd |Dddt|f| dks|j%r|t$} d|_%|}|jdkrd}|j'r|rt(|ds||_t)|j'||}|j%rz|}d}qn`|rjt(|d r4|j}nd}|rVt*j+,d!||jfnt*j+,d"|jnt*j+,d#dSnt$} t|dkr|jdkrd}d}d}|dd=q|jdkrdS|jdkrd|d}|jdkr|rt|d |j|_t|d$|j|_d}qt}d|_t(|d r4|j|_|_t(|d$rN|j|_|_||_|||}q|}|r|j|_|j|_||d}qt-d%qdS)&NrzPLY: PARSE DEBUG STARTrqlexrkz State : %sz#Defaulted state %s: Reduce using %dz Stack : %sz%s . %s cSsg|] }|jqSr r:rHZxxr r r rIsz'LRParser.parsedebug..z Action : Shift and goto state %sz3Action : Reduce rule [%s] with %s and goto state %d[,cSsg|]}t|jqSr )r+rF)rHZ_vr r r rIs]rXr\z Result : %srFrFzDone : Returning %szPLY: PARSE DEBUG ENDz Error : %scSsg|] }|jqSr r:rr r r rI=srCrT(yacc: Syntax error at line %d, token=%s yacc: Syntax error, token=%s yacc: Parse error in input. EOF r[yacc: internal parser error!!! ).rfrhrdrrr@rrrrCr7rr4rlrmrBrnr9r$rpopgetjoinr>lstriprr"rFrTr[rVrXr\rAcallabler)r` error_countrjrr6hasattrr8r{r|r RuntimeError r rrCrrr lookaheadlookaheadstackrwrhprodrrpslice errorcountr get_tokenrlrmerrtokenrorvltypetppnameplentargt1rLr(tokrTr r r r}\s|        *        $               *          zLRParser.parsedebugc CsNd}g}|j}|j} |j} |j} td} d} |sBddlm}|j}|| _|| _|dk r`| ||dkrp|j }n|}||_ g}||_ g}||_ || _ d}|dt}d|_||d}|| kr|s|s|}n|}|st}d|_|j}|||}n| |}|dk rJ|dkrJ|||}||d}| r| d8} q|dkr(| | }|j}|j}t}||_d|_|r|| dd}||d<|r|d}|j|_|j|_|d}t|d|j|_t|d|j|_|| _zJ|| d=|| d=|| ||| |d|}||Wqtk r~|||||d}d|_|}t} d |_YqXqn|r|j|_|j|_|g}|| _z2|| ||| |d|}||Wqtk r$|||||d}d|_|}t} d |_YqXq|dkrJ|d}t|d d}|S|dkr@| dksf|jr(t} d |_|}|jdkrd}|j r|rt!|d s||_t"|j ||}|jr&|}d}qn`|rt!|d r|j}nd}|rt#j$%d ||jfnt#j$%d|jnt#j$%ddSnt} t|dkr^|jdkr^d}d}d}|dd=q|jdkrndS|jdkr|d}|jdkr|rt|d |j|_t|d|j|_d}qt}d|_t!|d r|j|_|_t!|dr|j|_|_||_|||}q|}|r.|j|_|j|_||d}qt&dqdS)NrrqrrkrrXr\rFrFrCrTrrrr[r)'rfrhrdrrr@rrrCr7rr4rlrmrBrnr9r$rrrr"rFrTr[rVrXr\rArr`rrjr6rr8r{r|rrrr r r r~sN                                  zLRParser.parseoptcCsd}g}|j}|j} |j} |j} td} d} |sBddlm}|j}|| _|| _|dk r`| ||dkrp|j }n|}||_ g}||_ g}||_ || _ d}|dt}d|_||d}|| kr|s|s|}n|}|st}d|_|j}|||}n| |}|dk r|dkrJ|||}||d}| r| d8} q|dkr| | }|j}|j}t}||_d|_|r>|| dd}||d<|| _zJ|| d=|| d=|| ||| |d|}||Wqtk r8|||||d}d|_|}t} d|_YqXqn|g}|| _z2|| ||| |d|}||Wqtk r|||||d}d|_|}t} d|_YqXq|dkr|d}t|dd}|S|dkr| dks |jrt} d|_|}|jdkr(d}|jrj|rHt|d sH||_t|j||}|jr|}d}qn`|rt|d r|j}nd}|rt j!"d ||jfnt j!"d |jnt j!"d dSnt} t|dkr|jdkrd}d}d}|dd=q|jdkrdS|jdkr|d}|jdkr8d}qt}d|_t|d r^|j|_|_#t|drx|j$|_$|_%||_|||}q|}||d}qt&dqdS)NrrqrrkrrFrFrCrTrrrr[r)'rfrhrdrrr@rrrCr7rr4rlrmrBrnr9r$rrrr"rFrArr`rrjrVr6rr8rTr{r|rrXr[r\r)r rrCrrrrrrwrhrrrrrrrrlrmrrorvrrrrrrrLr(rrTr r r rs.                                  zLRParser.parseopt_notrack)NNFFN)NNFFN)NNFFN)NNFFN) rrrr r0r2rirxrr}r~rr r r r ras  W .raz^[a-zA-Z0-9_-]+$c@sReZdZdZdddZddZd d Zd d Zd dZddZ ddZ ddZ dS) ProductionrrightrNrc Cs||_t||_||_||_d|_||_||_||_t |j|_ g|_ |jD]}||j krL|j |qLg|_ d|_ |jrd|jd|jf|_n d|j|_dSN%s -> %srz %s -> )rtuplernumberfuncrfilelineprecr"usymsrnlr_itemslr_nextrr>) r rrr precedencerrrrDr r r r s$    zProduction.__init__cCs|jSrr=r;r r r r<+szProduction.__str__cCsdt|dS)Nz Production()r=r;r r r r?.szProduction.__repr__cCs t|jSr)r"rr;r r r rS1szProduction.__len__cCsdSNrqr r;r r r __nonzero__4szProduction.__nonzero__cCs |j|Sr)rr indexr r r rM7szProduction.__getitem__c Cs|t|jkrdSt||}zt|j|d|_Wnttfk rRg|_YnXz|j|d|_Wntk rd|_YnX|Sr)r"rLRItem Prodnameslr_after IndexErrorKeyError lr_before)r rLrr r r lr_item;s   zProduction.lr_itemcCs|jr||j|_dSrrrr pdictr r r bindKszProduction.bind)rNrr) rrrreducedr r<r?rSrrMrrr r r r r s rc@s,eZdZddZddZddZddZd S) MiniProductioncCs.||_||_||_d|_||_||_||_dSr)rr"rrrrr>)r r>rr"rrrr r r r TszMiniProduction.__init__cCs|jSrr=r;r r r r<]szMiniProduction.__str__cCs d|jS)NzMiniProduction(%s)r=r;r r r r?`szMiniProduction.__repr__cCs|jr||j|_dSrrrr r r rdszMiniProduction.bindN)rrrr r<r?rr r r r rSs rc@s$eZdZddZddZddZdS)rcCsZ|j|_t|j|_|j|_||_i|_|j|dt|j|_t|j|_|j |_ dS)N.) rrtrrlr_index lookaheadsinsertrr"r)r rrLr r r r s   zLRItem.__init__cCs,|jrd|jd|jf}n d|j}|Sr)rrr)r rDr r r r<s zLRItem.__str__cCsdt|dS)NzLRItem(rr=r;r r r r?szLRItem.__repr__N)rrrr r<r?r r r r rs rcCs6t|d}|dkr2|||kr(||S|d8}q dSrp)r")Zsymbols terminalsrPr r r rightmost_terminals    rc@s eZdZdS) GrammarErrorNr r r r r rsrc@seZdZddZddZddZddZd$d d Zd%ddZddZ ddZ ddZ ddZ ddZ ddZddZddZd&d d!Zd"d#Zd S)'GrammarcCsbdg|_i|_i|_i|_|D]}g|j|<qg|jd<i|_i|_i|_i|_t|_ d|_ dSNr) ProductionsrProdmap Terminals NonterminalsFirstFollow PrecedencesetUsedPrecedenceStart)r rtermr r r r s  zGrammar.__init__cCs t|jSr)r"rr;r r r rSszGrammar.__len__cCs |j|Sr)rrr r r rMszGrammar.__getitem__cCsL|jdgkstd||jkr*td||dkr:td||f|j|<dS)Nz2Must call set_precedence() before add_production()z,Precedence already specified for terminal %r)leftrnonassocz:Associativity must be one of 'left','right', or 'nonassoc')rAssertionErrorrr)r rassoclevelr r r set_precedences   zGrammar.set_precedenceNrrc Cs||jkrtd|||f|dkr6td|||ft|sRtd|||ft|D]\}}|ddkrzLt|}t|dkrtd||||f||jkrg|j|<|||<WqZWntk rYnXt|sZ|d krZtd ||||fqZd |kr|d d kr td ||f|d d kr>td||f|d } |j | } | sltd||| fn |j | |d d=nt ||j} |j | d} d||f} | |j kr|j | } td||| fd| j| jft|j} ||jkrg|j|<|D]J}||jkr(|j|| n&||jkr>g|j|<|j|| qt| ||| |||}|j|||j | <z|j||Wn"tk r|g|j|<YnXdS)Nz7%s:%d: Illegal rule name %r. Already defined as a tokenrz5%s:%d: Illegal rule name %r. error is a reserved wordz%s:%d: Illegal rule name %rrz'"rqzA%s:%d: Literal token %s in rule %r may only be a single characterz%precz!%s:%d: Illegal name %r in rule %rrz+%s:%d: Syntax error. Nothing follows %%preczH%s:%d: Syntax error. %%prec can only appear at the end of a grammar rulez/%s:%d: Nothing known about the precedence of %rrrz%s:%d: Duplicate rule %s. zPrevious definition at %s:%d)rr_is_identifiermatch enumerateevalr"r`rrraddrrrrrrrnrrr)r prodnamesymsrrrrLrDcZprecnameZprodprecmapmZpnumberrrr r r add_productionsv                       zGrammar.add_productioncCsT|s|jdj}||jkr&td|tdd|g|jd<|j|d||_dS)Nrqzstart symbol %s undefinedrS')rrrrrrnr)r startr r r set_startOs   zGrammar.set_startcs>fddtjdjdfddjDS)NcsB|kr dS|j|gD]}|jD] }|q.q$dSr)rrrr)rDrr&mark_reachable_from reachabler r r rbs   z5Grammar.find_unreachable..mark_reachable_fromrcsg|]}|kr|qSr r rG)rr r rIlsz,Grammar.find_unreachable..)rrrrr;r rr find_unreachable_szGrammar.find_unreachablec Csi}|jD] }d||<q d|d<|jD] }d||<q&d}|jD]N\}}|D]@}|jD]}||sXd}qrqXd}|rN||sd||<d}qBqNqB|s4qq4g} |D]4\}} | s||jkr||jkr|dkrq| |q| S)NTrkFr)rrrrsrrn) r Z terminatesrrL some_changeZplrrDZ p_terminatesinfiniterr r r infinite_cyclesvs8      zGrammar.infinite_cyclescCsPg}|jD]@}|sq |jD].}||jkr||jkr|dkr|||fqq |Sr)rrrrrn)r r(rrDr r r undefined_symbolss  zGrammar.undefined_symbolscCs2g}|jD]\}}|dkr|s||q|Sr)rrsrn)r Z unused_tokrDrNr r r unused_terminalss   zGrammar.unused_terminalscCs8g}|jD]$\}}|s|j|d}||q|SNr)rrsrrn)r Z unused_prodrDrNrr r r unused_ruless  zGrammar.unused_rulescCs@g}|jD]0}||jks ||jks |||j|dfq |Sr)rrrrn)r ZunusedZtermnamer r r unused_precedences  zGrammar.unused_precedencecCsZg}|D]B}d}|j|D]$}|dkr,d}q||kr||q|rFqqVq|d|S)NFT)rrn)r Zbetar(xZx_produces_emptyrr r r _firsts  zGrammar._firstcCs|jr |jS|jD]}|g|j|<qdg|jd<|jD]}g|j|<q6d}|jD]H}|j|D]8}||jD]&}||j|krn|j||d}qnq^qP|sFqqF|jS)NrkFT)rrrrrrrn)r rrLrrrr r r compute_firsts"      zGrammar.compute_firstc Cs<|jr |jS|js||jD]}g|j|<q |s@|jdj}dg|j|<d}|jddD]}t|jD]\}}||jkrl||j|dd}d}|D]:} | dkr| |j|kr|j| | d}| dkrd}q|s|t |jdkrl|j|jD]*} | |j|kr|j| | d}qqlq^|sLq6qL|jS)NrqrkFrT) rrrrrrrrrrnr") r rkdidaddrrPBZfstZhasemptyrr r r compute_follow?s:      zGrammar.compute_followc Cs|jD]}|}d}g}|t|kr(d}ntt||}z|j|j|d|_Wnttfk rjg|_YnXz|j|d|_Wntk rd|_YnX||_ |sq| ||}|d7}q||_ qdSNrrq) rr"rrrrrrrrrnr)r rZlastlrirPrZlrir r r build_lritemszs,       zGrammar.build_lritems)Nrr)N)N)rrrr rSrMrrrrrrrrrrrrrr r r r rs $  T @#% ;rc@s eZdZdS) VersionErrorNr r r r r r sr c@s,eZdZddZddZddZddZd S) LRTablecCsd|_d|_d|_d|_dSr)rergrc lr_methodr;r r r r szLRTable.__init__cCszt|tjr|}ntd|tj|}|jtkr:td|j |_ |j |_ g|_ |jD]}|j t|qV|j|_|jS)N import %s&yacc table file version is out of date)rJtypes ModuleTypeexecr{modulesZ _tabversion__tabversion__r Z _lr_actionreZ_lr_gotorgrcZ_lr_productionsrnrZ _lr_methodr Z _lr_signature)r modulerrr r r read_tables     zLRTable.read_tablecCsz ddl}Wntk r(ddl}YnXtj|s:tt|d}||}|tkr^t d|||_ ||}|||_ |||_ ||}g|_ |D]}|j t|q||S)Nrrbr )cPickle ImportErrorpickleospathexistsopenloadrr r rergrcrnrclose)r filenamerZin_fZ tabversion signaturerdrr r r read_pickles(         zLRTable.read_picklecCs|jD]}||qdSr)rcr)r rrr r r bind_callabless zLRTable.bind_callablesN)rrrr rr!r"r r r r r sr c CsLi}|D] }d||<qg}i}|D]$}||dkr"t|||||||q"|Sr)traverse)XRFPNrrBFr r r digraphs  r)c Cs||t|}|||<||||<||}|D]f} || dkrVt| ||||||t|||| ||<|| gD]} | ||krx||| qxq2|||krt||d<||||d<|} | |krt||d<||||d<|} qdS)Nrr)rnr"r#minrMAXINTr) rr'rBr(r$r%r&drelyaZelementr r r r#s(       r#c@s eZdZdS) LALRErrorNr r r r r r0sr0c@seZdZd$ddZddZddZd d Zd d Zd dZddZ ddZ ddZ ddZ ddZ ddZddZddZd%d d!Zd&d"d#ZdS)'LRGeneratedTablerNcCs|dkrtd|||_||_|s*t}||_i|_i|_|j|_i|_ i|_ d|_ d|_ d|_ g|_g|_g|_|j|j|j|dS)N)ZSLRrzUnsupported method %sr)r0grammarr rlogrergrrc lr_goto_cache lr0_cidhash _add_countZ sr_conflictZ rr_conflictZ conflicts sr_conflicts rr_conflictsrrrlr_parse_table)r r2methodr3r r r r "s,    zLRGeneratedTable.__init__cCsn|jd7_|dd}d}|rjd}|D]<}|jD]0}t|dd|jkrLq4||j|j|_d}q4q*q|S)NrqTF lr0_addedr)r6rrVrnrr;)r IJrrQrr r r lr0_closureGs    zLRGeneratedTable.lr0_closurec Cs|jt||f}|r|S|j|}|s:i}||j|<g}|D]H}|j}|rB|j|krB|t|}|s|i}||t|<|||}qB|d}|s|r||}||d<n||d<||jt||f<|S)Nrk)r4rr%rrrnr>) r r<rgrDZgsrrLs1r r r lr0_gotoas2       zLRGeneratedTable.lr0_gotoc Cs||jjdjgg}d}|D]}||jt|<|d7}q d}|t|kr||}|d7}i}|D]}|jD] }d||<qnqd|D]@}|||}|rt||jkrqt||jt|<| |qq@|Sr) r>r2rrr5r%r"rrArn) r CrPr<ZasymsiirDrr?r r r lr0_itemss(     zLRGeneratedTable.lr0_itemscCsxt}d}|jjddD]@}|jdkr6||jq|jD]}||kr<qq<||jqt||krjqtt|}q |Sr)rr2rr"rrr)r nullableZ num_nullablerrr r r compute_nullable_nonterminalss     z.LRGeneratedTable.compute_nullable_nonterminalscCsjg}t|D]X\}}|D]J}|j|jdkr||j|jdf}|d|jjkr||kr||qq |Sr)rrr"rr2rrn)r rBtransZstatenorvrrr r r find_nonterminal_transitionssz-LRGeneratedTable.find_nonterminal_transitionsc Csi}|\}}g}||||}|D]B} | j| jdkr$| j| jd} | |jjkr$| |kr$|| q$|dkr||jjdjdkr|d|S)Nrqrrk)rArr"rr2rrnr) r rBrGrEZdr_setrvr'termsr?rr/r r r dr_relations   zLRGeneratedTable.dr_relationc Csrg}|\}}||||}|jt|d}|D]:} | j| jdkr2| j| jd} | |kr2||| fq2|S)Nrrq)rAr5rr%rr"rrn) r rBrGemptyr-rvr'r?rQrr/r r r reads_relation szLRGeneratedTable.reads_relationcCsi}i}i}|D] }d||<q|D]\}} g} g} ||D],} | j| krNq<| j} |}| | jdkr| d} | j| }||f|kr| d}|| jkr| j||jjkrq| j||krq|d}q| ||f||||}|j t |d}qX||D]j}|j| jkrq|j| jkr"qd}||jkrZ|j|| j|dkrNq|d}q&| ||fqq<| D]*}||krg||<|||| fqp| ||| f<q"||fS)Nrqrr) rrr"rr2rrnrAr5rr%)r rBrGrEZlookdictZ includedictZdtransrrvr'ZlookbZincludesrrrQZlir?r&rPr r r compute_lookback_includes1 sX          z*LRGeneratedTable.compute_lookback_includescs0fdd}fdd}t|||}|S)Ncs|Sr)rJrrBrEr r r  z4LRGeneratedTable.compute_read_sets..cs|Sr)rLrNrOr r rP rQr))r rBntransrEr&r%r(r rOr compute_read_sets s z"LRGeneratedTable.compute_read_setscs(fdd}fdd}t|||}|S)Ncs|Srr rN)readsetsr r rP rQz6LRGeneratedTable.compute_follow_sets..cs |gSr)rrN)inclsetsr r rP rQrR)r rSrUrVr&r%r(r )rVrUr compute_follow_sets s   z$LRGeneratedTable.compute_follow_setsc Csl|D]^\}}|D]P\}}||jkr0g|j|<||g}|D]"}||j|kr@|j||q@qqdSr)rsrrrn) r Z lookbacksZ followsetrGZlbrvrrr/r r r add_lookaheads s    zLRGeneratedTable.add_lookaheadscCsP|}||}||||}||||\}}||||}|||dSr)rFrHrTrMrWrX)r rBrErGrUZlookdZincludedZ followsetsr r r add_lalr_lookaheads s  z$LRGeneratedTable.add_lalr_lookaheadsc$ Cs |jj}|jj}|j}|j}|j}i}|d|j|}|jdkrP| |d}|D]} g} i} i} i} |d|d||d| D]}|d|j |q|d| D]}|j |j dkr|j dkrd| d <|| d <q|jdkr|j|}n|jj|j }|D]}| ||d |j |ff| |}|dk r|dkr.|| |j j\}}||d \}}||ks||kr|d kr|j | |<|| |<|s|s|d ||j||df||j jd7_nB||kr|dkrd| |<n$|s|d||j||dfn|dkr|| }||j }|j|jkr|j | |<|| |<||}}||j jd7_||j jd8_n ||}}|j|||f|d|| |j | |n td|n(|j | |<|| |<||j jd7_qq|j }|j|d}||jjkr|| |}|jt|d}|dkr| ||d|f| |}|dk r|dkr||krtd|n|dkr|| |j j\}}||d \}}||ks||kr@|dkr@|| |j jd8_|| |<|| |<|s|d||j||dfnH||kr^|dkr^d| |<n*|s|s|d ||j||dfn td|q|| |<|| |<qi}| D]>\}}}|| kr|| |kr|d||d|||f<q|dd}| D]P\}}}|| kr|| |k r||f|kr|d||d}d|||f<q|rf|di} | D]*}!|!jD]}"|"|jjkrxd| |"<qxqn| D]D}#|| |#}|jt|d}|dkr|| |#<|d|#|q| ||<| ||<| ||<|d7}qXdS)NzParsing method: %srrrzstate %dz (%d) %srqrrkzreduce using rule %d (%s)rrz3 ! shift/reduce conflict for %s resolved as reducereducerz2 ! shift/reduce conflict for %s resolved as shiftshiftz= ! reduce/reduce conflict for %s resolved using rule %d (%s)zUnknown conflict in state %drzshift and go to state %dz Shift/shift conflict in state %drz %-15s %sz ! %-15s [ %s ]z" %-30s shift and go to state %d) r2rrrgrer3rr rDrYrr"rrrrrnrrr7rrr8r0rrrAr5r%rrr)$r rrrhrfr3ZactionprBstr<ZactlistZ st_actionZ st_actionpZst_gotorZlaheadsr/r&ZsprecZslevelZrprecZrlevelZoldpZppZchosenpZrejectprPr?rQZ _actprintrZnot_usedZnkeysrCrDrLr r r r9 s                                               zLRGeneratedTable.lr_parse_tablerc Cst|tjrtd|dd}tj||d}z8t|d}| dtj |t |j |fd}|r`i}|j D]T\} } | D]B\} } || } | sggf} | || <| d| | d| qqz| d |D]f\}} | d || dD]} | d | q| d | dD]} | d | q(| d q| d| dnF| d|j D]&\}} | d|d|d| fqt| d|ri}|jD]Z\} } | D]F\} } || } | sggf} | || <| d| | d| qʐq| d|D]h\}} | d || dD]} | d | qF| d | dD]} | d | qn| d q(| d| dnF| d|jD]&\}} | d|d|d| fq| d| d|jD]Z}|jr:| d|j|j|j|jtj |j|jfn| dt||j|jfq| d|Wn&tk r}zW5d}~XYnXdS)Nz"Won't overwrite existing tabmodulerrz.pywzu # %s # This file is automatically generated. Do not edit. _tabversion = %r _lr_method = %r _lr_signature = %r rqrz _lr_action_items = {z%r:([z%r,z],[z]),z} z _lr_action = {} for _k, _v in _lr_action_items.items(): for _x,_y in zip(_v[0],_v[1]): if not _x in _lr_action: _lr_action[_x] = {} _lr_action[_x][_k] = _y del _lr_action_items z _lr_action = { z (%r,%r):%r,z _lr_goto_items = {z _lr_goto = {} for _k, _v in _lr_goto_items.items(): for _x, _y in zip(_v[0], _v[1]): if not _x in _lr_goto: _lr_goto[_x] = {} _lr_goto[_x][_k] = _y del _lr_goto_items z _lr_goto = { z_lr_productions = [ z (%r,%r,%d,%r,%r,%d), z (%r,%r,%d,None,None,None), z] )rJrrIOErrorsplitrrrrrbasenamerr rersrrnrgrcrr>rr"rrr)r tabmodule outputdirr ZbasemodulenamerrZsmallerrsrDZndrrNrPrrer r r write_table s                             zLRGeneratedTable.write_tablec Csz ddl}Wntk r(ddl}YnXt|d}|t|t||j|t|||t||j|t||j |tg}|j D]T}|j r| |j |j|j|j tj|j|jfq| t ||j|jdddfq|||tW5QRXdS)Nrwb)rrrrdumprpickle_protocolr rergrcrrnr>rr"rrr`rr)r rr rZoutfZoutprr r r pickle_table s    , zLRGeneratedTable.pickle_table)rN)rr)r)rrrr r>rArDrFrHrJrLrMrTrWrXrYr9rdrhr r r r r1!s" %#8+P8 zr1cCs0t|}|j}|j|jkr,||j|Sr)r{ _getframe f_globalscopyf_localsupdate)ZlevelsrZldictr r r get_caller_module_dict' s     rnc Csg}|}d}|}|D]}|d7}|}|s2qz|ddkrf|sTtd||f|} |dd} n@|d} | }|dd} |d} | dkr| dkrtd||f|||| | fWqtk rYqtk rtd |||fYqXq|S) Nrqr|z%s:%d: Misplaced '|':z::=z!%s:%d: Syntax error. Expected ':'z%s:%d: Syntax error in rule %r) splitlinesr_r`rn Exceptionstrip) docrrr2ZpstringsZlastpZdlineZpsrrrZassignr r r parse_grammar3 s6  rvc@seZdZd ddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZdS)! ParserReflectNcCsL||_d|_d|_d|_t|_g|_d|_|dkrBtt j |_ n||_ dS)NF) rr error_functokensrrr2rrr{r|r3)r rr3r r r r ] szParserReflect.__init__cCs,|||||dSr) get_startget_error_func get_tokensget_precedenceget_pfunctionsr;r r r get_alll s zParserReflect.get_allcCs6|||||||jSr)validate_startvalidate_error_funcvalidate_tokensvalidate_precedencevalidate_pfunctionsvalidate_modulesrr;r r r validate_allt szParserReflect.validate_allc Cszddlm}Wn tk r0ddlm}YnXz|}|jrR||jd|jrz|ddd|jDd|jr|d|jd|j D] }|dr||ddqWnt t fk rYnXt |}tjddkr|d}|S) Nr)md5zlatin-1rcSsg|]}d|qS)r)r)rHrr r r rI sz+ParserReflect.signature..rr)Zhashlibrrrrmencoderrrypfuncs TypeError ValueErrorbase64Z b16encodedigestr{ version_infodecode)r rZsigrrr r r r ~ s*"  zParserReflect.signaturec Cstd}|jD]~}t|\}}i}t|D]^\}}|d7}||}|r.|d}||} | sn|||<q.t |} |j d| ||| q.qdS)Nz\s*def\s+(p_[a-zA-Z_0-9]*)\(rqz;%s:%d: Function %s redefined. Previously defined on line %d) recompilerinspectZgetsourcelinesrrgroupr getsourcefiler3r) r ZfrerlinesZlinenZ counthashrrrprevrr r r r s&       zParserReflect.validate_modulescCs|jd|_dS)Nr)rrrr;r r r rz szParserReflect.get_startcCs&|jdk r"t|jts"|jddS)Nz'start' must be a string)rrJ string_typesr3rr;r r r r s  zParserReflect.validate_startcCs|jd|_dS)Np_error)rrrxr;r r r r{ szParserReflect.get_error_funccCs|jrt|jtjrd}n*t|jtjr.d}n|jdd|_dS|jjj}|jjj }t |j}|j ||jjj|}|dkr|jd||d|_dS)Nrrqz2'p_error' defined, but is not a function or methodTz$%s:%d: p_error() requires 1 argument)rxrJr FunctionType MethodTyper3r__code__co_firstlineno co_filenamer getmodulerr co_argcount)r ZismethodZelineZefilerZargcountr r r r s      z!ParserReflect.validate_error_funccCsn|jd}|s&|jdd|_dSt|ttfsJ|jdd|_dS|sd|jdd|_dS||_dS)NryzNo token list is definedTztokens must be a list or tupleztokens is empty)rrr3rrJrtrry)r ryr r r r| s    zParserReflect.get_tokenscCsVd|jkr |jdd|_dSt}|jD]$}||krF|jd|||q,dS)Nrz.Illegal token name 'error'. Is a reserved wordTzToken %r multiply defined)ryr3rrrr)r rrLr r r r s   zParserReflect.validate_tokenscCs|jd|_dS)Nr)rrrr;r r r r} szParserReflect.get_precedencecCsg}|jrt|jttfs2|jdd|_dSt|jD]\}}t|ttfsj|jdd|_dSt|dkr|jd|d|_dS|d}t|ts|jdd|_dS|ddD]<}t|ts|jd d|_dS| |||dfqq<||_ dS) Nz"precedence must be a list or tupleTzBad precedence tablerpz?Malformed precedence entry %s. Must be (assoc, term, ..., term)rz)precedence associativity must be a stringrqz precedence items must be strings) rrJrtrr3rrr"rrnpreclist)r rrrrrr r r r s6       z!ParserReflect.validate_precedencecCs~g}|jD]T\}}|dr|dkr*qt|tjtjfr|jj}t |}| ||||j fq|j ddd||_dS)Np_rcSs |dt|d|d|dfS)Nrrqrprr=)Z p_functionr r r rP- s  z.ParserReflect.get_pfunctions..)key)rrs startswithrJrrrrrrrrn__doc__sortr)r Z p_functionsritemrrr r r r~ s zParserReflect.get_pfunctionsc CsNg}t|jdkr(|jdd|_dS|jD]\}}}}t|}|j|}t|tj rbd}nd}|j j |kr|jd|||j d|_q.|j j |kr|jd|||j d|_q.|j s|jd|||j q.z(t|||} | D]} ||| fqWn:tk r4} z|jt| d|_W5d} ~ XYnX|j|q.|jD]\} } | d rzt| tjtj frzqN| d rqN| d r| d kr|jd | t| tjr| j j dkst| tj rN| jj j dkrN| j rNz8| j d }|ddkr&|jd| j j| j j| Wntk r>YnXqN||_dS)Nrz+no rules of the form p_rulename are definedTrprqz%%s:%d: Rule %r has too many argumentsz#%s:%d: Rule %r requires an argumentzA%s:%d: No documentation string specified in function %r (ignored)rZt_rz%r not defined as a functionrrqz9%s:%d: Possible grammar rule %r defined without p_ prefix)r"rr3rrrrrJrrrrrrrrvrnr`r>rrrsrr__func__r_rrrr2)r r2rrrrurrZreqargsZparsed_gr?rcrLrNr r r r5 sn             z!ParserReflect.validate_pfunctions)N)rrrr rrr rrzrr{rr|rr}rr~rr r r r rw\ s  #rwc < s0 |dkr t}| rd}| dkr&ttj} rffddtD} t| }d|krntj|dj|d<ntd}| dkrt |t j r|j}nLd|kr|d}n:| d}d |dd}td |ttj|dd }tj|} |d }|rt |trd|kr|d|}|dk r&||d <t|| d }||jrJtd|}zt}| rl|| }n ||}|s||krz&||jt||j }|j!a!|WWSt"k r}z| #d|W5d}~XYnXWnFt$k r}z| #t|W5d}~XYnt%k r&YnX| dkr|rztt&tj | |d} Wn<t'k r}z| #d||ft(} W5d}~XYnXnt(} | )dt*d}|+rtd|j s| #dt,|j-}|j.D]P\}}}z|/|||Wn0t0k r*}z| #d|W5d}~XYnXq|j1D]b\}}|\} }!}"}#z|2|"|#|| |!Wn4t0k r}z| d|d}W5d}~XYnXq6z&|dkr|3|j4n |3|Wn6t0k r}z| t|d}W5d}~XYnX|rtd|5}$|$D]"\}%}&| d|&j6|&j7|%d}q|8}'|'r| )d | )d| )d |'D]}| #d|| )d|qf|r| )d | )d| )d t9|j:D]\}(})| )d|(|)q|;}*|*D]}&| #d|&j6|&j7|&j<qt=|'dkr| #dt=|'dkr.| #d t=|'t=|*dkrF| #d!t=|*dkrd| #d"t=|*|r4| )d | )d#| )d t>|j?}+|+@|+D]*}| )d$|d% d&d|j?|Dq| )d | )d'| )d t>|jA},|,@|,D]*}-| )d$|-d% d(d|jA|-Dq| )d |r~|B}.|.D]}/| #d)|/qF|C}0|0D]}1| d*|1d}qf|D}2|2D]\}}| d+||d}q|rtd|r| Ed,|tF||| }|rFt=|jG}3|3dkr| #d-n|3dkr| #d.|3t=|jH}4|4dkr0| #d/n|4dkrF| #d0|4|rp|jGs\|jHrp| #d | #d1| #d |jGD]\}5}6}7| #d2|6|5|7qtI}8|jHD]x\}5}9}:|5tJ|9tJ|:f|8krАq| #d3|5|9| #d4|:|5| #d3|5|9| #d4|:|5|8K|5tJ|9tJ|:fqg};|jHD]@\}5}9}:|:jLs.|:|;kr.| #d5|:| #d5|:|;M|:q.|rz|N|| |Wn6t'k r}z| #d6||fW5d}~XYnX| rz|O| |Wn6t'k r }z| #d6| |fW5d}~XYnX||jt||j }|j!a!|S)7Nrcsg|]}|t|fqSr )rV)rHrrr r rI szyacc..__file__rrprrr r __package__r)r3zUnable to build parserz.There was a problem loading the table file: %rr]zCouldn't open %r. %sz5Created by PLY version %s (http://www.dabeaz.com/ply)Fz no p_error() function is definedz%sTz;%s:%d: Symbol %r used, but not defined as a token or a rulezUnused terminals:zToken %r defined, but not usedz %srz Rule %-5d %sz$%s:%d: Rule %r defined, but not usedrqzThere is 1 unused tokenzThere are %d unused tokenszThere is 1 unused rulezThere are %d unused rulesz'Terminals, with rules where they appearz %-20s : %srcSsg|] }t|qSr r=rGr r r rI0 sz*Nonterminals, with rules where they appearcSsg|] }t|qSr r=rGr r r rI8 szSymbol %r is unreachablez)Infinite recursion detected for symbol %rz0Precedence rule %r defined for unknown symbol %rzGenerating %s tablesz1 shift/reduce conflictz%d shift/reduce conflictsz1 reduce/reduce conflictz%d reduce/reduce conflictsz Conflicts:z7shift/reduce conflict for %s in state %d resolved as %sz;reduce/reduce conflict in state %d resolved using rule (%s)zrejected rule (%s) in state %dzRule (%s) is never reducedzCouldn't create %r. %s)P tab_modulerr{r|dirdictrrrnrJrrr_rrrVrrdirnamerr>rwrrrr r r!rr"rrarxrrsrr rrr^rr __version__rrryrrrr2rrrrrrrrrrrr"rtrrrrrrrr1r7r8rr%rrrnrdrh)maxsizer+objectrrrsrr)r+r/r3r1r.r0r2r4r8r9r@rarrrrrrrrr r r)r#r0r1rnrvrwrr r r r >s   4[ H.rT    )