3 L]k @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)ej*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.10Tz parser.outparsetabLALRF(c@s4eZdZddZddZeZddZddZeZd S) PlyLoggercCs ||_dS)N)f)selfrr 9/tmp/pip-install-wfra5znf/pycparser/pycparser/ply/yacc.py__init__nszPlyLogger.__init__cOs|jj||ddS)N )rwrite)rmsgargskwargsr r r debugqszPlyLogger.debugcOs|jjd||ddS)Nz WARNING: r )rr )rrrrr r r warningvszPlyLogger.warningcOs|jjd||ddS)NzERROR: r )rr )rrrrr r r erroryszPlyLogger.errorN) __name__ __module__ __qualname__r rinforrcriticalr r r r rms rc@seZdZddZddZdS) NullLoggercCs|S)Nr )rnamer r r __getattribute__szNullLogger.__getattribute__cOs|S)Nr )rrrr r r __call__szNullLogger.__call__N)rrrrrr r r r rsrc@s eZdZdS) YaccErrorN)rrrr 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>)rrr!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() cCstjttS)N)warningswarn_warnmsg_errokr r r r erroks r-cCstjttS)N)r)r*r+_restartr r r r restarts r/cCstjttS)N)r)r*r+_tokenr r r r tokens r1c Cs>|ja|ja|ja||}y bbbWntk r8YnX|S)N)r-r,r1r0r/r. NameError) errorfuncr1parserr#r r r call_errorfuncs r5c@seZdZddZddZdS) YaccSymbolcCs|jS)N)r!)rr r r __str__szYaccSymbol.__str__cCst|S)N)str)rr r r __repr__szYaccSymbol.__repr__N)rrrr7r9r r r r r6sr6c@sfeZdZdddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ dS)YaccProductionNcCs||_||_d|_d|_dS)N)slicestacklexerr4)rsr<r r r r szYaccProduction.__init__cCsBt|trdd|j|DS|dkr2|j|jS|j|jSdS)NcSsg|] }|jqSr )value).0r>r r r sz.YaccProduction.__getitem__..r) isinstancer;r?r<)rnr r r __getitem__s   zYaccProduction.__getitem__cCs||j|_dS)N)r;r?)rrCvr r r __setitem__szYaccProduction.__setitem__cCsdd|j||DS)NcSsg|] }|jqSr )r?)r@r>r r r rAsz/YaccProduction.__getslice__..)r;)rijr r r __getslice__szYaccProduction.__getslice__cCs t|jS)N)rr;)rr r r __len__szYaccProduction.__len__cCst|j|ddS)Nlinenor)getattrr;)rrCr r r rKszYaccProduction.linenocCs||j|_dS)N)r;rK)rrCrKr r r set_linenoszYaccProduction.set_linenocCs,t|j|dd}t|j|d|}||fS)NrKr endlineno)rLr;)rrC startlineendliner r r linespanszYaccProduction.linespancCst|j|ddS)Nlexposr)rLr;)rrCr r r rR szYaccProduction.lexposcCs,t|j|dd}t|j|d|}||fS)NrRr endlexpos)rLr;)rrCstartposendposr r r lexspanszYaccProduction.lexspancCstdS)N) SyntaxError)rr r r rszYaccProduction.error)N)rrrr rDrFrIrJrKrMrQrRrVrr r r r r:s r:c@s\eZdZddZddZddZddZd d Zdd dZdddZ dddZ dddZ d S)LRParsercCs0|j|_|j|_|j|_||_|jd|_dS)NT) lr_productions productions lr_actionactionlr_gotogotor3set_defaulted_stateserrorok)rZlrtabZerrorfr r r r s zLRParser.__init__cCs d|_dS)NT)r`)rr r r r-&szLRParser.errokcCs@|jdd=|jdd=t}d|_|jj||jjddS)Nz$endr) statestacksymstackr6r!append)rsymr r r r/)s    zLRParser.restartcCsTi|_xH|jjD]:\}}t|j}t|dkr|ddkr|d|j|<qWdS)Nr)defaulted_statesr\itemslistvaluesr)rstateactionsrulesr r r r_9s  zLRParser.set_defaulted_statescCs i|_dS)N)rf)rr r r disable_defaulted_states@sz!LRParser.disable_defaulted_statesNFcCsZ|str.t|trttj}|j|||||S|rD|j|||||S|j|||||SdS)N) yaccdevelrBintrsysstderr parsedebugparseoptparseopt_notrack)rinputr=rtracking tokenfuncr r r parseCs  zLRParser.parsec Csd}g}|j}|j} |j} |j} td} d} |jd|sLddlm}|j}|| _|| _ |dk rj|j ||dkrz|j }n|}||_ g}||_ g}||_ || _d}|jdt}d|_|j|d}x|jd|jd||| kr.|s|s|}n|j}|st}d|_|j}||j|}n| |}|jd|| |jd d d jd d |Dddt|fj|dk r|dkr|j||}|jd||j|d}| r| d8} q|dkrN| | }|j}|j}t}||_d|_|rB|jd|jddjdd || dDd| |d%||n|jd|jg| |d&||r|| dd}||d<|r|d}|j|_|j|_|d'}t|d|j|_t|d|j|_|| _ yd|| d=||_!|j"| || d=|jdt#| d|j|| |d(|}|j|Wqt$k r|j||j%|dd)|j|d*}d|_d|_|}t&} d|_'YqXqn|r|j|_|j|_|g}|| _ yL||_!|j"| |jdt#| d|j|| |d+|}|j|Wqt$k rJ|j||j|d,}d|_d|_|}t&} d|_'YqXq|dkr|d-}t|dd}|jdt#||jd|S|dkr|j(dd d jdd |Dddt|fj| dks|j'rt&} d|_'|}|jdkrd}|j)rB|rt*|d r||_||_!t+|j)||}|j'r|}d}qn`|rt*|dr\|j}nd}|r~t,j-j.d ||jfnt,j-j.d!|jnt,j-j.d"dSnt&} t|dkr|jdkrd}d}d}|dd=q|jdkrdS|jdkr|d.}|jdkr6|r0t|d|j|_t|d#|j|_d}qt}d|_t*|dr\|j|_|_t*|d#rv|j|_|_||_|j||}q|j}|r|j|_|j|_|j|d/}qt/d$qWdS)0NrzPLY: PARSE DEBUG STARTre)lexz$endz State : %sz#Defaulted state %s: Reduce using %dz Stack : %sz%s . %s cSsg|] }|jqSr )r!)r@xxr r r rAsz'LRParser.parsedebug..z Action : Shift and goto state %sz3Action : Reduce rule [%s] with %s and goto state %d[,cSsg|]}t|jqSr )r(r?)r@Z_vr r r rAs]rNrSz Result : %srFr?zDone : Returning %szPLY: PARSE DEBUG ENDz Error : %scSsg|] }|jqSr )r!)r@r|r r r rABsr=rKz(yacc: Syntax error at line %d, token=%s zyacc: Syntax error, token=%sz yacc: Parse error in input. EOF rRzyacc: internal parser error!!! rrrrrrrrrr)0r\r^rZrfr:rrzryr=r4rur1rarbr<rcr6r!rpopgetjoinr8lstriprrr?rKrRrLrNrSr;rjcallabler&rWextend error_countr`rr3hasattrr5rprqr RuntimeError) rrur=rrvrw lookaheadlookaheadstackrkr^prodrfpslice errorcountry get_tokenrarberrtokenrdrjltypetppnameplentargt1rCr%tokrKr r r rr\s~        .        $               .           zLRParser.parsedebugc Csvd}g}|j}|j} |j} |j} td} d} |sBddlm}|j}|| _|| _|dk r`|j ||dkrp|j }n|}||_ g}||_ g}||_ || _ d}|jdt}d|_|j|d}x|| kr|s|s|}n|j}|st}d|_|j}||j|}n| |}|dk rh|dkrN|j||}|j|d}| r| d8} q|dkrF| | }|j}|j}t}||_d|_|r|| dd}||d<|r|d}|j|_|j|_|d}t|d|j|_t|d|j|_|| _yP|| d=||_|j| || d=|j|| |d|}|j|Wqtk r|j||j|dd|j|d}d|_d|_|}t } d|_!YqXqn|r|j|_|j|_|g}|| _y8||_|j| |j|| |d|}|j|Wqtk rB|j||j|d}d|_d|_|}t } d|_!YqXq|dkrh|d}t|d d}|S|dkrf| dks|j!rNt } d|_!|}|jdkrd}|j"r|rt#|d  r||_||_t$|j"||}|j!rL|}d}qn`|r %sr{z %s -> )rtuplernumberfuncrfilelineprecrusymsrclr_itemslr_nextrr8) rrrr precedencerrrr>r r r r s$    zProduction.__init__cCs|jS)N)r8)rr r r r7=szProduction.__str__cCsdt|dS)Nz Production())r8)rr r r r9@szProduction.__repr__cCs t|jS)N)rr)rr r r rJCszProduction.__len__cCsdS)Nrer )rr r r __nonzero__FszProduction.__nonzero__cCs |j|S)N)r)rindexr r r rDIszProduction.__getitem__cCs|t|jkrdSt||}yt|j|d|_Wnttfk rRg|_YnXy|j|d|_Wntk rd|_YnX|S)Nre)rrLRItem Prodnameslr_after IndexErrorKeyError lr_before)rrCrr r r lr_itemMs   zProduction.lr_itemcCs|jr||j|_dS)N)rr)rpdictr r r bind]szProduction.bindrr)rNrzr) rrrreducedr r7r9rJrrDrrr r r r rs rc@s,eZdZddZddZddZddZd S) MiniProductioncCs.||_||_||_d|_||_||_||_dS)N)rrrrrrr8)rr8rrrrrr r r r fszMiniProduction.__init__cCs|jS)N)r8)rr r r r7oszMiniProduction.__str__cCs d|jS)NzMiniProduction(%s))r8)rr r r r9rszMiniProduction.__repr__cCs|jr||j|_dS)N)rr)rrr r r rvszMiniProduction.bindN)rrrr r7r9rr r r r res rc@s$eZdZddZddZddZdS)rcCsZ|j|_t|j|_|j|_||_i|_|jj|dt|j|_t|j|_|j |_ dS)N.) rrhrrlr_index lookaheadsinsertrrr)rrrCr r r r s   zLRItem.__init__cCs,|jrd|jdj|jf}n d|j}|S)Nz%s -> %sr{z %s -> )rrr)rr>r r r r7s zLRItem.__str__cCsdt|dS)NzLRItem(r)r8)rr r r r9szLRItem.__repr__N)rrrr r7r9r r r r rs rcCs:t|d}x(|dkr4|||kr*||S|d8}qWdS)Nrer)r)symbols terminalsrGr r r rightmost_terminals     rc@s eZdZdS) GrammarErrorN)rrrr r r r rsrc@seZdZddZddZddZddZd$d d Zd%ddZddZ ddZ ddZ ddZ ddZ ddZddZddZd&d d!Zd"d#Zd S)'GrammarcCsfdg|_i|_i|_i|_x|D]}g|j|<q Wg|jd<i|_i|_i|_i|_t|_ d|_ dS)Nr) ProductionsrProdmap Terminals NonterminalsFirstFollow PrecedencesetUsedPrecedenceStart)rrtermr r r r s  zGrammar.__init__cCs t|jS)N)rr)rr r r rJszGrammar.__len__cCs |j|S)N)r)rrr r r rDszGrammar.__getitem__cCsL|jdgkstd||jkr*td||dkr:td||f|j|<dS)Nz2Must call set_precedence() before add_production()z,Precedence already specified for terminal %rleftrnonassocz:Associativity must be one of 'left','right', or 'nonassoc')rrr)rAssertionErrorrr)rrassoclevelr r r set_precedences   zGrammar.set_precedenceNrzrcCs||jkrtd|||f|dkr6td|||ftj|sRtd|||fxt|D]\}}|ddkryJt|}t|dkrtd||||f||jkrg|j|<|||<w\Wntk rYnXtj| r\|d kr\td ||||fq\Wd |kr|dd kr$td ||f|dd krBtd ||f|d} |jj | } | sptd||| fn |j j | |dd=nt ||j} |jj | d} d||f} | |j kr|j | } td||| fd| j| jft|j} ||jkrg|j|<xR|D]J}||jkr.|j|j| n&||jkrDg|j|<|j|j| q Wt| ||| |||}|jj|||j | <y|j|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'"rezA%s:%d: Literal token %s in rule %r may only be a single characterz%precz!%s:%d: Illegal name %r in rule %rz+%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 %rrz%s -> %sz%s:%d: Duplicate rule %s. zPrevious definition at %s:%drrr)rr)rr_is_identifiermatch enumerateevalrrWrrraddrrrrrrrcrrr)rprodnamesymsrrrrCr>cZprecnameZprodprecmapmZpnumberrrr r r add_production sp                        zGrammar.add_productioncCsT|s|jdj}||jkr&td|tdd|g|jd<|j|jd||_dS)Nrezstart symbol %s undefinedrzS')rrrrrrcr)rstartr r r set_startas   zGrammar.set_startcs>fddtjdjdfddjDS)NcsJ|kr dSj|x.jj|gD]}x|jD] }|q2Wq&WdS)N)rrrr)r>rr#)mark_reachable_from reachablerr r rts   z5Grammar.find_unreachable..mark_reachable_fromrcsg|]}|kr|qSr r )r@r>)rr r rA~sz,Grammar.find_unreachable..)rrrr)rr )rrrr find_unreachableqszGrammar.find_unreachablec Csi}x|jD] }d||<q Wd|d<x|jD] }d||<q,Wxpd}x`|jjD]R\}}xH|D]@}x |jD]}||shd}PqhWd}|r\||sd||<d}Pq\WqNW|s>Pq>Wg} x@|jD]4\}} | s||jkr||jkr|dkrq| j|qW| S)NTz$endFr)rrrrgrrc) rZ terminatesrrC some_changeplrr>Z p_terminatesinfiniterr r r infinite_cycless:       zGrammar.infinite_cyclescCsXg}xN|jD]D}|sq x8|jD].}||jkr||jkr|dkr|j||fqWq W|S)Nr)rrrrrc)rr%rr>r r r undefined_symbolss  zGrammar.undefined_symbolscCs8g}x.|jjD] \}}|dkr| r|j|qW|S)Nr)rrgrc)rZ unused_tokr>rEr r r unused_terminalss zGrammar.unused_terminalscCs<g}x2|jjD]$\}}|s|j|d}|j|qW|S)Nr)rrgrrc)rZ unused_prodr>rErr r r unused_ruless zGrammar.unused_rulescCsDg}x:|jD]0}||jkp"||jks |j||j|dfq W|S)Nr)rrrrc)rZunusedZtermnamer r r unused_precedences  zGrammar.unused_precedencecCs`g}xV|D]D}d}x2|j|D]$}|dkr0d}q||kr|j|qW|rLq Pq W|jd|S)NFzT)rrc)rbetar%xZx_produces_emptyrr r r _first s  zGrammar._firstcCs|jr |jSx|jD]}|g|j|<qWdg|jd<x|jD]}g|j|<qT) rrrrrrrrrrcr) rrkdidaddrrGBZfstZhasemptyrr r r compute_followQs<     zGrammar.compute_followcCsx|jD]}|}d}g}x|t|kr,d}ntt||}y|j|j|d|_Wnttfk rng|_YnXy|j|d|_Wntk rd|_YnX||_ |sP|j ||}|d7}qW||_ qWdS)Nrre) rrrrrrrrrrrcr)rrZlastlrirGrZlrir r r build_lritemss.       zGrammar.build_lritems)Nrzr)N)N)rrrr rJrDrrrrrrrrrrrrrr r r r rs $  T @#% ;rc@s eZdZdS) VersionErrorN)rrrr r r r rsrc@s,eZdZddZddZddZddZd S) LRTablecCsd|_d|_d|_d|_dS)N)r[r]rY lr_method)rr r r r szLRTable.__init__cCs~t|tjr|}ntd|tj|}|jtkr:td|j |_ |j |_ g|_ x|jD]}|j jt|qXW|j|_|jS)Nz import %sz&yacc table file version is out of date)rBtypes ModuleTypeexecrpmodulesZ _tabversion__tabversion__rZ _lr_actionr[Z_lr_gotor]rYZ_lr_productionsrcrZ _lr_methodrZ _lr_signature)rmodulerrr r r read_tables     zLRTable.read_tablec Csy ddl}Wntk r(ddl}YnXtjj|s:tt|d}|j|}|tkr^t d|j||_ |j|}|j||_ |j||_ |j|}g|_ x|D]}|j jt|qW|j|S)Nrrbz&yacc table file version is out of date)cPickle ImportErrorpickleospathexistsopenloadrrrr[r]rYrcrclose)rfilenamerZin_fZ tabversion signaturerZrr r r read_pickles(          zLRTable.read_picklecCsx|jD]}|j|qWdS)N)rYr)rrrr r r bind_callabless zLRTable.bind_callablesN)rrrr rrrr r r r rsrc CsTi}x|D] }d||<q Wg}i}x,|D]$}||dkr(t|||||||q(W|S)Nr)traverse)XRFPNrr<Fr r r digraphs    rc Cs |j|t|}|||<||||<||}xr|D]j} || dkrXt| ||||||t|||| ||<x.|j| gD]} | ||kr|||j| q|Wq4W|||krt||d<||||d<|j} x2| |krt||d<||||d<|j} qWdS)Nrrerrrr)rcrr minrMAXINTr) rr r<rr r r drelyaelementr r r r s(        r c@s eZdZdS) LALRErrorN)rrrr r r r r)src@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|_|jj|jj|jj|jdS)NSLRrzUnsupported method %sr)rr)rgrammarrrlogr[r]rrY lr_goto_cache lr0_cidhash _add_countZ sr_conflictZ rr_conflict conflicts sr_conflicts rr_conflictsrrrlr_parse_table)rrmethodrr r r r 4s,    zLRGeneratedTable.__init__cCsz|jd7_|dd}d}xV|rtd}xH|D]@}x:|jD]0}t|dd|jkrRq:|j|j|j|_d}q:Wq.Wq W|S)NreTF lr0_addedr)rrrLrcrr$)rIJrrHrr r r lr0_closureYs    zLRGeneratedTable.lr0_closurec Cs|jjt||f}|r|S|jj|}|s:i}||j|<g}xP|D]H}|j}|rD|j|krD|jt|}|s~i}||t|<|j||}qDW|jd}|s|r|j|}||d<n||d<||jt||f<|S)Nz$end)rrr"rrrcr') rr%rgr>ZgsrrCs1r r r lr0_gotoss2        zLRGeneratedTable.lr0_gotoc Cs|j|jjdjgg}d}x"|D]}||jt|<|d7}q"Wd}x|t|kr||}|d7}i}x$|D]}x|jD] }d||<qxWqlWxJ|D]B}|j||}| st||jkrqt||jt|<|j |qWqFW|S)Nrre) r'rrrrr"rrr*rc) rCrGr%Zasymsiir>rr(r r r lr0_itemss(      zLRGeneratedTable.lr0_itemscCst}d}xrxV|jjddD]B}|jdkr:|j|jqx$|jD]}||krBPqBW|j|jqWt||krrPt|}q W|S)Nrre)rrrrrrr)rnullableZ num_nullablerrr r r compute_nullable_nonterminalss     z.LRGeneratedTable.compute_nullable_nonterminalscCsrg}xht|D]\\}}xR|D]J}|j|jdkr||j|jdf}|d|jjkr||kr|j|qWqW|S)Nre)rrrrrrrc)rr+transZstatenorjrrr r r find_nonterminal_transitionss z-LRGeneratedTable.find_nonterminal_transitionsc Csi}|\}}g}|j|||}xJ|D]B} | j| jdkr&| j| jd} | |jjkr&| |kr&|j| q&W|dkr||jjdjdkr|jd|S)Nrerz$end)r*rrrrrrcr) rr+r0r.Zdr_setrjr termsr(rrr r r dr_relations   zLRGeneratedTable.dr_relationc Csvg}|\}}|j|||}|jjt|d}xB|D]:} | j| jdkr4| j| jd} | |kr4|j|| fq4W|S)Nrer)r*rrr"rrrrc) rr+r0emptyrrjr r(rHrrr r r reads_relation s zLRGeneratedTable.reads_relationcCsi}i}i}x|D] }d||<qWx|D]\}} g} g} xR||D]D} | j| krZqH| j} |}x| | jdkr | d} | j| }||f|kr| d}xH|| jkr| j||jjkrP| j||krP|d}qW| j||f|j|||}|jj t |d}qfWx||D]t}|j| jkr,q|j| jkr>qd}xD||jkrx|j|| j|dkrlP|d}qDW| j||fqWqHWx2| D]*}||krg||<||j|| fqW| ||| f<q*W||fS)Nrerr) rrrrrrrcr*rrr")rr+r0r.ZlookdictZ includedictZdtransrrjr ZlookbZincludesrrrHlir(r#rGr r r compute_lookback_includesC sX         z*LRGeneratedTable.compute_lookback_includescs0fdd}fdd}t|||}|S)Ncsj|S)N)r3)r)r+r.rr r  sz4LRGeneratedTable.compute_read_sets..csj|S)N)r5)r)r+r.rr r r8 s)r)rr+ntransr.r r rr )r+r.rr compute_read_sets s z"LRGeneratedTable.compute_read_setscs(fdd}fdd}t|||}|S)Ncs|S)Nr )r)readsetsr r r8 sz6LRGeneratedTable.compute_follow_sets..cs j|gS)N)r)r)inclsetsr r r8 s)r)rr9r;r<r r rr )r<r;r compute_follow_sets s   z$LRGeneratedTable.compute_follow_setsc Csxxr|jD]f\}}x\|D]T\}}||jkr4g|j|<|j|g}x*|D]"}||j|krF|j|j|qFWqWq WdS)N)rgrrrc) rZ lookbacksZ followsetr0Zlbrjrrrr r r add_lookaheads s    zLRGeneratedTable.add_lookaheadscCsP|j}|j|}|j|||}|j|||\}}|j|||}|j||dS)N)r/r1r:r7r=r>)rr+r.r0r;ZlookdZincludedZ followsetsr r r add_lalr_lookaheads s  z$LRGeneratedTable.add_lalr_lookaheadsc$ Cs8|jj}|jj}|j}|j}|j}i}|jd|j|j}|jdkrP|j |d}x|D]} g} i} i} i} |jd|jd||jdx| D]}|jd|j |qW|jdx| D]}|j |j dkr(|j dkrd| d <|| d <q|jdkr|j|}n|jj|j }x|D]}| j||d |j |ff| j|}|dk r|dkr>|j|d\}}||j j\}}||ks||kr|d kr|j | |<|| |<| r| r|jd ||jj||df||j jd7_nB||kr|dkrd| |<n$|s|jd||jj||dfn|dkr|| }||j }|j|jkr|j | |<|| |<||}}||j jd7_||j jd8_n ||}}|jj|||f|jd|| |j | |n td|n(|j | |<|| |<||j jd7_q&Wq|j }|j|d}||jjkr|j| |}|jjt|d}|dkr| j||d|f| j|}|dk r|dkr||krtd|n|dkr|j|d\}}|| |j j\}}||ks||krR|d krR|| |j jd8_|| |<|| |<|s|jd||jj||dfnL||krp|dkrpd| |<n.| r| r|jd ||jj||dfn td|q|| |<|| |<qWi}xF| D]>\}}}|| kr|| |kr|jd||d|||f<qW|jdd}xX| D]P\}}}|| kr"|| |k r"||f|kr"|jd||d}d|||f<q"W|r|jdi} x6| D].}!x&|!jD]}"|"|jjkrd| |"<qWqWxL| D]D}#|j| |#}|jjt|d}|dkr|| |#<|jd|#|qW| ||<| ||<| ||<|d7}q\WdS)NzParsing method: %srrrzzstate %dz (%d) %srezS'z$endzreduce 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 %dzshift and go to state %dz Shift/shift conflict in state %dz %-15s %sz ! %-15s [ %s ]z" %-30s shift and go to state %d)rrr)rrr) rrrr]r[rrrr-r?rrrrrrrcrrr rrr!rrrr*rr"rrr)$rrrr^r\rZactionpr+str%ZactlistZ st_actionZ st_actionpZst_gotorZlaheadsrr#ZsprecZslevelZrprecZrlevelZoldpppZchosenpZrejectprGr(rHZ _actprintrZnot_usedZnkeysr,r>rCr r r r" s                                             zLRGeneratedTable.lr_parse_tablerzcCst|tjrtd|jdd}tjj||d}ylt|d}|j dtjj |t |j |fd}|rti}xf|j jD]X\} } xN| jD]B\} } |j| } | sggf} | || <| dj| | dj| qWq|W|j dxz|jD]n\}} |j d |x | dD]} |j d | q W|j d x | dD]} |j d | q8W|j d qW|j d |j dnJ|j dx4|j jD]&\}} |j d|d|d| fqW|j d |ri}xl|jjD]^\} } xR| jD]F\} } |j| } | sggf} | || <| dj| | dj| qWqW|j dx||jD]p\}} |j d |x | dD]} |j d | qjW|j d x | dD]} |j d | qW|j d qJW|j d |j dnJ|j dx4|jjD]&\}} |j d|d|d| fqW|j d |j dxd|jD]Z}|jrl|j d|j|j|j|jtjj |j|jfn|j dt||j|jfq0W|j d|jWn&tk r}zWYdd}~XnXdS)Nz"Won't overwrite existing tabmodulerrez.pywzu # %s # This file is automatically generated. Do not edit. _tabversion = %r _lr_method = %r _lr_signature = %r rz _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] r)rBrrIOErrorsplitrrrrr basenamerrr[rgrrcr]rYrr8rrrrr)r tabmodule outputdirrZbasemodulenamerrZsmallerrgr>ZndrrErGrrer r r write_table s       "      "   "  zLRGeneratedTable.write_tablecCsy ddl}Wntk r(ddl}YnXt|d}|jt|t|j|j|t|j||t|j|j|t|j|j |tg}x^|j D]T}|j r|j |j |j|j|j tjj|j|jfq|j t ||j|jdddfqW|j||tWdQRXdS)Nrwb)rrrrdumprpickle_protocolrr[r]rYrrcr8rrrrrGrr)rrrroutfZoutprr r r pickle_table s    ,"zLRGeneratedTable.pickle_table)rN)rzrz)rz)rrrr r'r*r-r/r1r3r5r7r:r=r>r?r"rKrPr r r r r3s" %#8+PB zrcCs0tj|}|jj}|j|jkr,|j|j|S)N)rp _getframe f_globalscopyf_localsupdate)ZlevelsrZldictr r r get_caller_module_dictC s     rVc Csg}|j}d}|}x|D]}|d7}|j}|s4qy|ddkrh|sVtd||f|} |dd} n@|d} | }|dd} |d} | dkr| dkrtd||f|j||| | fWqtk rYqtk rtd |||jfYqXqW|S) Nrer|z%s:%d: Misplaced '|'r:z::=z!%s:%d: Syntax error. Expected ':'z%s:%d: Syntax error in rule %r) splitlinesrFrWrc Exceptionstrip) docrrrZpstringsZlastpZdlineZpsrrrZassignr r r parse_grammarO s6    r]c@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_functokensrrrrrrprqr)rrrr r r r y szParserReflect.__init__cCs,|j|j|j|j|jdS)N) get_startget_error_func get_tokensget_precedenceget_pfunctions)rr r r get_all s zParserReflect.get_allcCs6|j|j|j|j|j|j|jS)N)validate_startvalidate_error_funcvalidate_tokensvalidate_precedencevalidate_pfunctionsvalidate_modulesr)rr r r validate_all szParserReflect.validate_allc Csg}yv|jr|j|j|jr:|jdjdd|jD|jrR|jdj|jx$|jD]}|drZ|j|dqZWWnttfk rYnXdj|S)NrzcSsg|]}dj|qS)rz)r)r@rr r r rA sz+ParserReflect.signature..r{r)rrcrrr`pfuncs TypeError ValueError)rpartsrr r r r s  zParserReflect.signaturec Cstjd}x|jD]}ytj|\}}Wntk r>wYnXi}xjt|D]^\}}|d7}|j|}|rN|jd}|j |} | s|||<qNtj |} |j j d| ||| qNWqWdS)Nz\s*def\s+(p_[a-zA-Z_0-9]*)\(rez;%s:%d: Function %s redefined. Previously defined on line %d) recompilerinspectgetsourcelinesrErrgroupr getsourcefilerr) rZfrerlinesZlinenZ counthashrrrprevrr r r rl s$       zParserReflect.validate_modulescCs|jjd|_dS)Nr)rrr)rr r r ra szParserReflect.get_startcCs&|jdk r"t|jts"|jjddS)Nz'start' must be a string)rrB string_typesrr)rr r r rg s  zParserReflect.validate_startcCs|jjd|_dS)Np_error)rrr_)rr r r rb szParserReflect.get_error_funccCs|jrt|jtjrd}n*t|jtjr.d}n|jjdd|_dS|jjj}|jjj }t j |j}|j j ||jjj|}|dkr|jjd||d|_dS)Nrrez2'p_error' defined, but is not a function or methodTz$%s:%d: p_error() requires 1 argument)r_rBr FunctionType MethodTyperr__code__co_firstlineno co_filenamert getmodulerr co_argcount)rismethodZelineZefilerZargcountr r r rh s      z!ParserReflect.validate_error_funccCsn|jjd}|s&|jjdd|_dSt|ttfsJ|jjdd|_dS|sd|jjdd|_dS||_dS)Nr`zNo token list is definedTztokens must be a list or tupleztokens is empty)rrrrrBrhrr`)rr`r r r rc s    zParserReflect.get_tokenscCsZd|jkr |jjdd|_dSt}x.|jD]$}||krH|jjd||j|q.WdS)Nrz.Illegal token name 'error'. Is a reserved wordTzToken %r multiply defined)r`rrrrr)rrrCr r r ri s   zParserReflect.validate_tokenscCs|jjd|_dS)Nr)rrr)rr r r rd szParserReflect.get_precedencecCsg}|jrt|jttfs2|jjdd|_dSxt|jD]\}}t|ttfsj|jjdd|_dSt|dkr|jjd|d|_dS|d}t|ts|jjdd|_dSxH|ddD]8}t|ts|jjd d|_dS|j |||dfqWq>W||_ dS) Nz"precedence must be a list or tupleTzBad precedence tablerz?Malformed precedence entry %s. Must be (assoc, term, ..., term)rz)precedence associativity must be a stringrez precedence items must be strings) rrBrhrrrrrrzrcpreclist)rrrrrrr r r rj s6       z!ParserReflect.validate_precedencecCsg}xl|jjD]^\}}|jd s|dkr.qt|tjtjfrt|d|jj }t j |}|j ||||j fqW|jddd||_dS)Np_r{rcSs |dt|d|d|dfS)Nrrerr)r8)Z p_functionr r r r8D s z.ParserReflect.get_pfunctions..)key)rrg startswithrBrr|r}rLr~rrtrrc__doc__sortrn)rZ p_functionsritemrrr r r re7 s zParserReflect.get_pfunctionscCs^g}t|jdkr(|jjdd|_dSx"|jD]\}}}}tj|}|j|}t|tj rfd}nd}|j j |kr|jjd|||j d|_q2|j j |kr|jjd|||j d|_q2|j s|jjd|||j q2y,t|||} x| D]} |j|| fqWWn:tk r<} z|jjt| d|_WYdd} ~ XnX|jj|q2Wx|jjD]\} } | jd rt| tjtj frq\| jd rq\| jd r| d kr|jjd | t| tjr| j j dkst| tj r\| jj j dkr\| j r\y8| j jd }|ddkr4|jjd| j j| j j| Wntk rLYnXq\W||_dS)Nrz+no rules of the form p_rulename are definedTrrez%%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_r{z%r not defined as a functionr{rXz9%s:%d: Possible grammar rule %r defined without p_ prefix)rrnrrrtrwrrBrr}r~rrrrr]rcrWr8rrrgrr|__func__rFrrrr)rrrrrr\rrZreqargsZparsed_gr(rJrCrEr r r rkL s\            z!ParserReflect.validate_pfunctions)N)rrrr rfrmrrlrargrbrhrcrirdrjrerkr r r r r^x s  r^c <Osd |dkr t}| rd}| dkr&ttj} rffddtD} t| }d|krntj|dj|d<ntd}| dkrt |t j r|j}nLd|kr|d}n:|j d}dj |dd6}td |ttj|dd }tjj|} |jd }|ot |trd|kr|d|}|dk r$||d <t|| d }|j|jrHtd|j}yt}| rj|j| }n |j|}|s||kry"|j|jt||j }|j!a!|St"k r}z| j#d|WYdd}~XnXWnFt$k r }z| j#t|WYdd}~Xnt%k r YnX| dkr|rytt&tjj | |d} Wn<t'k r}z| j#d||ft(} WYdd}~XnXnt(} | j)dt*d}|j+rtd|j s| j#dt,|j-}xZ|j.D]P\}}}y|j/|||Wn0t0k r&}z| j#d|WYdd}~XnXqWxl|j1D]b\}}|\} }!}"}#y|j2|"|#|| |!Wn4t0k r}z| jd|d}WYdd}~XnXq6Wy&|dkr|j3|j4n |j3|Wn6t0k r}z| jt|d}WYdd}~XnX|rtd|j5}$x*|$D]"\}%}&| jd|&j6|&j7|%d}qW|j8}'|'r| j)d | j)d| j)d x&|'D]}| j#d|| j)d|qnW|r| j)d | j)d| j)d x&t9|j:D]\}(})| j)d|(|)qW|j;}*x$|*D]}&| j#d|&j6|&j7|&j<qWt=|'dkr"| j#dt=|'dkr@| j#dt=|'t=|*dkrX| j#d t=|*dkrv| j#d!t=|*|rN| j)d | j)d"| j)d t>|j?}+|+j@x2|+D]*}| j)d#|d$j d%d|j?|DqW| j)d | j)d&| j)d t>|jA},|,j@x2|,D]*}-| j)d#|-d$j d'd|jA|-DqW| j)d |r|jB}.x|.D]}/| j#d(|/qbW|jC}0x|0D]}1| jd)|1d}qW|jD}2x$|2D]\}}| jd*||d}qW|rtd|r| jEd+|tF||| }|rlt=|jG}3|3dkr | j#d,n|3dkr6| j#d-|3t=|jH}4|4dkrV| j#d.n|4dkrl| j#d/|4|r|jGs|jHr| j#d | j#d0| j#d x&|jGD]\}5}6}7| j#d1|6|5|7qWtI}8x|jHD]x\}5}9}:|5tJ|9tJ|:f|8krq| j#d2|5|9| j#d3|:|5| j#d2|5|9| j#d3|:|5|8jK|5tJ|9tJ|:fqWg};xL|jHD]B\}5}9}:|:jL r^|:|;kr^| j#d4|:| j#d4|:|;jM|:q^W|ry|jN|| |Wn6t'k r}z| j#d5||fWYdd}~XnX| rBy|jO| |Wn6t'k r@}z| j#d5| |fWYdd}~XnX|j|jt||j }|j!a!|S)7Nrcsg|]}|t|fqSr )rL)r@r)rr r rA szyacc..__file__rrrrez import %srz __package__r)rzUnable to build parserz.There was a problem loading the table file: %rrDzCouldn'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 usedzThere is 1 unused tokenzThere are %d unused tokenszThere is 1 unused rulezThere are %d unused rulesz'Terminals, with rules where they appearz %-20s : %sr{cSsg|] }t|qSr )r8)r@r>r r r rAG sz*Nonterminals, with rules where they appearcSsg|] }t|qSr )r8)r@r>r r r rAO 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. %sr)P tab_modulerrprqdirdictrrrVrBrrrFrrrLrrdirnamerr8r^rfrrrrrrrrrXr_rxrZrrrrrErr __version__rmrr`rrrrrrrrrrrrrrrrrhrrrrrrrrr r!rr"rrrcrKrP)>s   4m H.rT   )