;ò ÄcYEc@sudZdklZdZdZdZdZeZdZdZ dZ d Z d k Z d k Z d kZd kZyeWnej od „ZnXd „Zd dZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdfd„ƒYZdefd„ƒYZdefd„ƒYZdefd „ƒYZd!efd"„ƒYZd#efd$„ƒYZd%fd&„ƒYZ d'e fd(„ƒYZ!d)e fd*„ƒYZ"d+fd,„ƒYZ#d-e$fd.„ƒYZ%d/fd0„ƒYZ&d1e&fd2„ƒYZ'e i(d3ƒZ)e i(d4ƒZ*d5fd6„ƒYZ+d7e+i&fd8„ƒYZ,d S(9sTToy Parser Generator is a lexical and syntactic parser generator for Python. This generator was born from a simple statement: YACC is too complex to use in simple cases (calculators, configuration files, small programming languages, ...). TPG can very simply write parsers that are usefull for most every day needs (even if it can't make your coffee). With a very clear and simple syntax, you can write an attributed grammar that is translated into a recursive descendant parser. TPG generated code is very closed to the original grammar. This means that the parser works "like" the grammar. A grammar rule can be seen as a method of the parser class, symbols as method calls, attributes as method parameters and semantic values as return values. You can also add Python code directly into grammar rules and build abstract syntax trees while parsing. (s generatorssTPGs3.1.1s 2006-10-07sA Python parser generatorsLGPLsChristophe Delordschristophe.delord@free.frs(http://christophe.delord.free.fr/en/tpg/NcCstttiƒ|ƒS(N(szipsxrangessyssmaxintsseq(sseq((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys@scCs|S(N(sx(sx((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysBss isErrorcBs tZdZd„Zd„ZRS(s Error((line, column), msg) Error is the base class for TPG exceptions. Attributes: line : line number from where the error has been raised column : column number from where the error has been raised msg : message associated to the error cCs1|\}}||f\|_|_||_dS(N(slinescolumnsselfsmsg(sselfs.2smsgslinescolumn((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__Os cCs'd|ii|i|i|ifSdS(Ns%s at line %s, column %s: %s(sselfs __class__s__name__slinescolumnsmsg(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__str__Rs(s__name__s __module__s__doc__s__init__s__str__(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysErrorEs  s WrongTokencBstZdZd„ZRS(sh WrongToken() WrongToken is raised when the parser can not continue in order to backtrack. cCsti|ƒdS(N(s Exceptions__init__sself(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__Zs(s__name__s __module__s__doc__s__init__(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys WrongTokenUs s LexicalErrorcBstZdZRS(s: LexicalError((line, column), msg) LexicalError is raised by lexers when a lexical error is encountered. Attributes: line : line number from where the error has been raised column : column number from where the error has been raised msg : message associated to the error (s__name__s __module__s__doc__(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys LexicalError]s sSyntacticErrorcBstZdZRS(s* SyntacticError((line, column), msg) SyntacticError is raised by parsers when they fail. Attributes: line : line number from where the error has been raised column : column number from where the error has been raised msg : message associated to the error (s__name__s __module__s__doc__(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysSyntacticErroris s SemanticErrorcBs tZdZd„Zd„ZRS(s  SemanticError(msg) SemanticError is raised by user actions when an error is detected. Attributes: msg : message associated to the error cCsti|ƒ||_dS(N(s Exceptions__init__sselfsmsg(sselfsmsg((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__}s cCsd|ii|ifSdS(Ns%s: %s(sselfs __class__s__name__smsg(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__str__€s(s__name__s __module__s__doc__s__init__s__str__(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys SemanticErrorus  s LexerOptionscBsAtZdZeidƒZd„Zd„Zd„Zd„Z RS(s= LexerOptions(word_bounded, compile_options) LexerOptions is a base class for lexers holding lexers' options. Parameters: word_bounded : if True identifier like regular expressions are added word boundaries compile_options : options given to re.compile to compile regular expressions s^\w+$cCs%| o|i|_n||_dS(N(swbsselfsnot_word_boundeds word_boundedscompile_options(sselfswbscompile_options((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__scCsti||iƒSdS(sG compile expr using self.compile_options as re.compile options N(srescompilesexprsselfscompile_options(sselfsexpr((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys re_compile”scCs'|ii|ƒo d|Sn|SdS(sI add word boundaries (\b) to expr if it looks like an identifier s\b%s\bN(sselfsword_resmatchsexpr(sselfsexpr((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys word_bounded™s cCs|SdS(sS return expr without change. Used to replace word_bounded when wb is False N(sexpr(sselfsexpr((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysnot_word_bounded¡s( s__name__s __module__s__doc__srescompilesword_res__init__s re_compiles word_boundedsnot_word_bounded(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys LexerOptionsƒs    sNamedGroupLexercBsntZdZd„Zed„Zed„Zd„Zd„Zd„Z d„Z d„Z d „Z d „Z RS( sÏ NamedGroupLexer(word_bounded, compile_options) NamedGroupLexer is a TPG lexer: - use named group regular expressions (faster but limited to 100 tokens) Attributes: token_re : regular expression containing the whole lexer tokens : dictionnary name -> (value, is_real_token) name is a token name value is a function that compute the value of a token from its text is_real_token is a boleean. True for tokens, False for separators Once the lexer is started more attributes are defined: input : input string being parsed max_pos : maximum position reached in the input string last_token : last token reached in the input string pos : position in the input string of the current token line : line of the current token column : column of the current token cur_token : current token cCs)ti|||ƒg|_h|_dS(N(s LexerOptionss__init__sselfswbscompile_optionsstoken_restokens(sselfswbscompile_options((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__¼s cCs|t|ƒ o|d„}n||ijo:|iid||i|ƒfƒ|t f|i|Íss (?P<%s>%s)sDuplicate token definition (%s)N( scallablesvaluesnamesselfstokensstoken_resappends word_boundedsexprsTrues SemanticError(sselfsnamesexprsvalue((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys def_tokenÁs #cCs|t|ƒ o|d„}n||ijo:|iid||i|ƒfƒ|t f|i|áss (?P<%s>%s)sDuplicate token definition (%s)N( scallablesvaluesnamesselfstokensstoken_resappends word_boundedsexprsFalses SemanticError(sselfsnamesexprsvalue((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys def_separatorÔs #cCs9t|itƒo"|idi|iƒƒ|_ndS(sE build the token_re attribute from the tokens and separators s|N(s isinstancesselfstoken_reslists re_compilesjoin(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysbuildèscCs@||_d|_t|_|iƒ|itƒ|iƒdS(se start a lexical analysis Parameters: input : input string to be parsed iN(sinputsselfsmax_possNones last_tokensbuildsbacksnext(sselfsinput((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysstartîs     cCs-|it|iƒjot|itƒSdS(sR True if the current position of the lexer is the end of the input string N(sselfsposslensinputs isinstances cur_tokensEOFToken(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyseofûscCsr|tjo.d|_ddf\|_|_t|_n4|i|_|i|i f\|_|_||_dS(sC change the current token to token (used for backtracking) iiN( stokensNonesselfsposslinescolumns cur_tokensstopsend_lines end_column(sselfstoken((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysbacks    c Cs”|itjo d} n |ii} xgto_|it|iƒjo,t |i |i |i| ƒ|_|iSn|i i |i|iƒ} | oo| i}| iƒ}|i|\}}y||ƒ}Wn2tj o&t|i |i fd|ƒ‚nX| iƒ\}} | |_|i |i f\} } d|jo8|i |idƒ7_ t|ƒ|idƒ|_ n|i t|ƒ7_ |ojt|||| | |i |i || | ƒ |_|i|ijo|i|_|i|_ n|iSq‹q)d}|ii"d|i|i|ƒ}|djo|i|i|!}n|i|i|i|!}t|i |i fd|ƒ‚q)WdS(s\ return the next token Tokens are Token instances. Separators are ignored. isLexical error in %ss iiÿÿÿÿsLexical error near %sN(%sselfs cur_tokensNones prev_stopsstopsTruesposslensinputsEOFTokenslinescolumnstoken_resmatchstoks lastgroupsnamesgroupstextstokenssvalues real_tokens WrongTokens LexicalErrorsspansstartstok_lines tok_columnscountsrfindsTokensmax_poss last_tokenswsfindsnlserr(sselfsvaluesnlsnameserrsstartstextsws real_tokenstoks prev_stops tok_columnsstopstok_line((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysnext sJ  !   $   0 " cCs |iSdS(s" return the current token N(sselfs cur_token(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pystoken9scCs|i|i|i!SdS(s¯ extract text from the input string Parameters: start : token from which the extraction starts stop : token where the extraction stops N(sselfsinputsstartsstops prev_stop(sselfsstartsstop((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysextract>s(s__name__s __module__s__doc__s__init__s_ids def_tokens def_separatorsbuildsstartseofsbacksnextstokensextract(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysNamedGroupLexer¦s       - sLexercBsAtZdZd„Zed„Zed„Zd„Zd„ZRS(sA Lexer(word_bounded, compile_options) Lexer is a TPG lexer: - based on NamedGroupLexer - doesn't use named group regular expressions (slower but not limited to 100 tokens) - select the longuest match so the order of token definitions doesn't mater Attributes: tokens : list (name, regexp, value, is_real_token) name is a token name regexp is the regular expression of the token value is a function that computes the value of a token from its text is_real_token is a boleean. True for tokens, False for separators Once the lexer is started more attributes are defined: input : input string being parsed max_pos : maximum position reached in the input string last_token : last token reached in the input string pos : position in the input string of the current token line : line of the current token column : column of the current token cur_token : current token cCs ti|||ƒg|_dS(N(s LexerOptionss__init__sselfswbscompile_optionsstokens(sselfswbscompile_options((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init___scCstt|ƒ o|d„}n||ijo2|ii||i|i|ƒƒ|t fƒnt d|ƒ‚dS(sk adds a new token to the lexer Parameters: name : name of the token expr : regular expression of the token value : function to compute the token value from its text The default for value is the identity function. If value is not callable it is returned whatever the text of the token. cCs|S(N(svalue(s_svalue((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysossDuplicate token definition (%s)N( scallablesvaluesnamesselfstokenssappends re_compiles word_boundedsexprsTrues SemanticError(sselfsnamesexprsvalue((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys def_tokencs 2cCstt|ƒ o|d„}n||ijo2|ii||i|i|ƒƒ|t fƒnt d|ƒ‚dS(s® add a new separator to the lexer Parameters: name : name of the separator expr : regular expression of the separator value : function to compute the separator value from its text The default for value is the identity function. If value is not callable it is returned whatever the text of the separator. Note that separator values are ignored. cCs|S(N(svalue(s_svalue((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys‚ssDuplicate token definition (%s)N( scallablesvaluesnamesselfstokenssappends re_compiles word_boundedsexprsFalses SemanticError(sselfsnamesexprsvalue((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys def_separatorus 2cCs6||_d|_t|_|itƒ|iƒdS(se start a lexical analysis Parameters: input : input string to be parsed iN(sinputsselfsmax_possNones last_tokensbacksnext(sselfsinput((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysstartˆs     c Csç|itjo d} n |ii} xºto²|it|iƒjo,t |i |i |i| ƒ|_|iSnt}d}x‡|iD]|\}}} } |i|i|iƒ}|oK|iƒ} t| ƒt|ƒjo"|}|}| }| }| }qq‹q‹W|oGy||ƒ}Wn2tj o&t|i |i fd|ƒ‚nX|iƒ\}} | |_|i |i f\}}d|jo8|i |i dƒ7_ t|ƒ|i!dƒ|_ n|i t|ƒ7_ |ojt"||||||i |i || | ƒ |_|i|i#jo|i|_#|i|_$n|iSqÞq)d}|ii&d|i|i|ƒ}|djo|i|i|!}n|i|i|i|!}t|i |i fd|ƒ‚q)WdS( s\ return the next token Tokens are Token instances. Separators are ignored. issLexical error in %ss iiÿÿÿÿsLexical error near %sN()sselfs cur_tokensNones prev_stopsstopsTruesposslensinputsEOFTokenslinescolumnstokstextstokenss_names_regexps_values_is_real_tokensmatchs_toksgroups_textsnamesvalues real_tokens WrongTokens LexicalErrorsspansstartstok_lines tok_columnscountsrfindsTokensmax_poss last_tokenswsfindsnlserr(sselfs tok_columnstexts real_tokens_toksnlsstartstoks_regexpsstops_values prev_stops_is_real_tokens_textsnameserrsvalues_namestok_linesw((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysnext”s\  !   $   0 " ( s__name__s __module__s__doc__s__init__s_ids def_tokens def_separatorsstartsnext(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysLexerGs     sCacheNamedGroupLexercBs)tZdZd„Zd„Zd„ZRS(sI CacheNamedGroupLexer(word_bounded, compile_options) CacheNamedGroupLexer is a TPG lexer: - based on NamedGroupLexer - the complete token list is built before parsing (faster with very ambigous grammars but needs more memory) Attributes: token_re : regular expression containing the whole lexer tokens : dictionnary name -> (value, is_real_token) name is a token name value is a function that computes the value of a token from its text is_real_token is a boleean. True for tokens, False for separators cache : token list Once the lexer is started more attributes are defined: input : input string being parsed max_pos : maximum position reached in the input string last_token : last token reached in the input string pos : position in the input string of the current token line : line of the current token column : column of the current token cur_token : current token cCsti|||ƒdS(N(sNamedGroupLexers__init__sselfswbscompile_options(sselfswbscompile_options((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__âscCs½g|_||_d|_t|_|iƒ|itƒxRtoJt i |ƒ}t |iƒ|_ |ii|ƒt|tƒoPq>q>Wd|_t|_|itƒ|i ƒdS(se start a lexical analysis Parameters: input : input string to be parsed iN(sselfscachesinputsmax_possNones last_tokensbuildsbacksTruesNamedGroupLexersnextstokenslensindexsappends isinstancesEOFToken(sselfsinputstoken((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysstartås$          cCs¤|itjo d}n|iid}|i|}|i|_|i|i f\|_|_ ||_|i|i jo|i|_ |i|_ n|iSdS(s\ return the next token Tokens are Token instances. Separators are ignored. iiN( sselfs cur_tokensNonesindexscachestokensstopsposslinescolumnsmax_poss last_token(sselfsindexstoken((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysnextüs     (s__name__s __module__s__doc__s__init__sstartsnext(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysCacheNamedGroupLexerÉs   s CacheLexercBs)tZdZd„Zd„Zd„ZRS(sÜ CacheLexer(word_bounded, compile_options) CacheLexer is a TPG lexer: - based on Lexer - doesn't use named group regular expressions (slower but not limited to 100 tokens) - select the longuest match so the order of token definitions doesn't mater - the complete token list is built before parsing (faster with very ambigous grammars but needs more memory) Attributes: tokens : list (name, regexp, value, is_real_token) name is a token name regexp is the regular expression of the token value is a function that computes the value of a token from its text is_real_token is a boleean. True for tokens, False for separators cache : token list Once the lexer is started more attributes are defined: input : input string being parsed max_pos : maximum position reached in the input string last_token : last token reached in the input string pos : position in the input string of the current token line : line of the current token column : column of the current token cur_token : current token cCsti|||ƒdS(N(sLexers__init__sselfswbscompile_options(sselfswbscompile_options((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__)scCs³g|_||_d|_t|_|itƒxRtoJti |ƒ}t |iƒ|_ |ii |ƒt|tƒoPq4q4Wd|_t|_|itƒ|i ƒdS(se start a lexical analysis Parameters: input : input string to be parsed iN(sselfscachesinputsmax_possNones last_tokensbacksTruesLexersnextstokenslensindexsappends isinstancesEOFToken(sselfsinputstoken((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysstart,s"         cCs¤|itjo d}n|iid}|i|}|i|_|i|i f\|_|_ ||_|i|i jo|i|_ |i|_ n|iSdS(s\ return the next token Tokens are Token instances. Separators are ignored. iiN( sselfs cur_tokensNonesindexscachestokensstopsposslinescolumnsmax_poss last_token(sselfsindexstoken((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysnextBs     (s__name__s __module__s__doc__s__init__sstartsnext(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys CacheLexers   sContextSensitiveLexercBsntZdZd„Zed„Zed„Zd„Zd„Zd„Z d„Z d„Z d „Z d „Z RS( s ContextSensitiveLexer(word_bounded, compile_options) ContextSensitiveLexer is a TPG lexer: - context sensitive means that each regular expression is matched when required by the parser. Different tokens can be found at the same position if the parser uses different grammar rules. Attributes: tokens : dictionnary name -> (regexp, value) name is a token name regexp is the regular expression of the token value is a function that computes the value of a token from its text separators : list (name, regexp, value) name is a token name regexp is the regular expression of the token value is a function that computes the value of a token from its text Once the lexer is started more attributes are defined: input : input string being parsed max_pos : maximum position reached in the input string last_token : last token reached in the input string pos : position in the input string of the current token line : line of the current token column : column of the current token cur_token : current token cCs)ti|||ƒh|_g|_dS(N(s LexerOptionss__init__sselfswbscompile_optionsstokenss separators(sselfswbscompile_options((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__ns cCs{t|ƒ o|d„}n||ijo ||ijo)|i|i|ƒƒ|f|i|ssDuplicate token definition (%s)N( scallablesvaluesnamesselfstokenss separatorss re_compiles word_boundedsexprs SemanticError(sselfsnamesexprsvalue((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys def_tokenss  )cCst|ƒ o|d„}n||ijo ||ijo/|ii||i|i|ƒƒ|fƒnt d|ƒ‚dS(s® add a new separator to the lexer Parameters: name : name of the separator expr : regular expression of the separator value : function to compute the separator value from its text The default for value is the identity function. If value is not callable it is returned whatever the text of the separator. Note that separator values are ignored. cCs|S(N(svalue(s_svalue((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys’ssDuplicate token definition (%s)N( scallablesvaluesnamesselfstokenss separatorssappends re_compiles word_boundedsexprs SemanticError(sselfsnamesexprsvalue((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys def_separator…s  /cCs,||_d|_t|_|itƒdS(se start a lexical analysis Parameters: input : input string to be parsed iN(sinputsselfsmax_possNones last_tokensback(sselfsinput((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysstart˜s    cCs|it|iƒjSdS(sR True if the current position of the lexer is the end of the input string N(sselfsposslensinput(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyseof£scCsŽ|tjo1d|_ddf\|_|_tƒ|_n4|i|_|i |i f\|_|_||_|i ƒ|i|i_ dS(sC change the current token to token (used for backtracking) iiN( stokensNonesselfsposslinescolumnsSOFTokens cur_tokensstopsend_lines end_columnseat_separatorss next_start(sselfstoken((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysback¨s     c Cs÷t}xê| oát}xÔ|iD]É\}}}|i|i |i ƒ}|o›|i ƒ\}}|i ||!}||ƒ}||_ d|jo8|i|idƒ7_t|ƒ|idƒ|_n|it|ƒ7_t}q!q!Wq WdS(sG skip separators in the input string from the current position s N(sFalsesdonesTruesselfs separatorssnamesregexpsvaluesmatchsinputsposssepsspansstartsstopstextslinescountslensrfindscolumn( sselfsnamessepstextsstopsvaluesstartsdonesregexp((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyseat_separators¶s$     c Cs”|i|\} }| i|i|iƒ}|t jo t ‚nO|i t jo d}n |i i }|iƒ\}}|i||!}||ƒ}||_|i|if\} }d|jo8|i|idƒ7_t|ƒ|idƒ|_n|it|ƒ7_t|||| ||i|i|||ƒ |_ |i|ijo|i|_|i |_n|iƒ|i|i _|i SdS(sK return the next token value if it matches the expected token name is N(sselfstokenssnamesregexpsvaluesmatchsinputsposstoksNones WrongTokens cur_tokens prev_stopsstopsspansstartstextslinescolumnstok_lines tok_columnscountslensrfindsTokensmax_poss last_tokenseat_separatorss next_start( sselfsnames tok_columnsstartsstopsvaluestoks prev_stopstextsregexpstok_line((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyseatÊs0        0  cCs |iSdS(s" return the current token N(sselfs cur_token(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pystokenèscCs@|o|ipd}|o|ipd}|i||!SdS(s· extract text from the input string Parameters: start : the token from which the extraction starts stop : the token where the extraction stops iiÿÿÿÿN(sstarts next_startsstopsselfsinput(sselfsstartsstop((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysextractís(s__name__s __module__s__doc__s__init__s_ids def_tokens def_separatorsstartseofsbackseat_separatorsseatstokensextract(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysContextSensitiveLexerTs         sTokenc BsntZdZd„Zd„Zd„Zd„Zd„Zedededed d ƒZ d „Z d „Z RS( sÔ Token(name, text, value, line, column, end_line, end_column, start, stop, prev_stop) Token object used by lexers Attributes: name : name of the token text : text matched by the regular expression value : value computed from the text line : line of the token in the input string column : column of the token in the input string end_line : line of the end of the token end_column : column of the end of the token start : position of the start in the input string of the token stop : position of the end in the input string of the token prev_stop : position of the end of the previous token c Csp||_||_||_||f\|_|_||f\|_|_|| f\|_|_ | |_ dS(N( snamesselfstextsvalueslinescolumnsend_lines end_columnsstartsstops prev_stop( sselfsnamestextsvalueslinescolumnsend_lines end_columnsstartsstops prev_stop((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__ s   cCs dk}|iddtƒdS(Ns,row is deprecated, please use column insteadscategory(swarningsswarnsDeprecationWarning(sselfswarnings((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyswarn_rowscCs|iƒ|iSdS(N(sselfswarn_rowscolumn(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysget_rowscCs|iƒ|iSdS(N(sselfswarn_rowscolumn(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysset_rowscCs|iƒ|`dS(N(sselfswarn_rowscolumn(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysdel_rowssfgetsfsetsfdelsdocsrowcCs||ijSdS(sŒ return True is the token name is the name of the expected token Parameters: name : name of the expected token N(snamesself(sselfsname((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysmatchscCs*d|i|i|i|i|ifSdS(Nsline %s, column %s: %s %s %s(sselfslinescolumnsnamestextsvalue(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__str__$s( s__name__s __module__s__doc__s__init__swarn_rowsget_rowsset_rowsdel_rowspropertysrowsmatchs__str__(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysTokenøs     ! sEOFTokencBstZdZd„ZRS(sß EOFToken(line, column, pos, prev_stop) Token for the end of file (end of the input string). EOFToken is a Token object. Attributes: name : name of the token text : text matched by the regular expression value : value computed from the text line : line of the token in the input string column : column of the token in the input string end_line : line of the end of the token end_column : column of the end of the token start : position of the start in the input string of the token stop : position of the end in the input string of the token prev_stop : position of the end of the previous token c Cs/ti|ddt|||||||ƒ dS(NsEOF(sTokens__init__sselfsNoneslinescolumnsposs prev_stop(sselfslinescolumnsposs prev_stop((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__:s(s__name__s __module__s__doc__s__init__(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysEOFToken's sSOFTokencBstZdZd„ZRS(sÇ SOFToken() Token for the start of file (start of the input string). SOFToken is a Token object. Attributes: name : name of the token text : text matched by the regular expression value : value computed from the text line : line of the token in the input string column : column of the token in the input string end_line : line of the end of the token end_column : column of the end of the token start : position of the start in the input string of the token stop : position of the end in the input string of the token prev_stop : position of the end of the previous token c Cs/ti|ddtdddddddƒ dS(NsSOFii(sTokens__init__sselfsNone(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__Ps(s__name__s __module__s__doc__s__init__(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysSOFToken=s sPycBstZdd„Zd„ZRS(NicCs/tid|ƒ}|i|_|i|_dS(Ni( ssyss _getframeslevelsframes f_globalssselfsglobalssf_localsslocals(sselfslevelsframe((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__Ts cCst|||i|iƒSdS(N(sevalsitemsselfsglobalsslocals(sselfsitem((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys __getitem__Xs(s__name__s __module__s__init__s __getitem__(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysPySs sParserMetaClasscBstZdZd„ZRS(s+ ParserMetaClass is the metaclass of Parser objects. When a ParserMetaClass class in defined, its doc string should contain a grammar. This grammar is parsed by TPGParser and the generated code is added to the class. If the class doesn't have a doc string, nothing is generated c CsŒtt|ƒi|||ƒy|d}Wntj onJXt t i dƒi ƒ}x-||ƒD]\}}}t|||ƒqeWdS(Ns__doc__i(ssupersParserMetaClasssclss__init__snamesbasessdictsgrammarsKeyErrors TPGParserssyss _getframes f_globalssparsers attributessourcescodessetattr( sclssnamesbasessdictscodesgrammars attributesparserssource((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__es (s__name__s __module__s__doc__s__init__(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysParserMetaClass\s sParsercBsƒtZeZd„Zd„Zd„Zd„Zd„Ze d„Z e d„Z e d„Z d „Z d „Zd „Zd „ZRS( NcCs|iƒ|_dS(s Parser is the base class for parsers. This class can not have a doc string otherwise it would be considered as a grammar. The metaclass of this class is ParserMetaClass. Attributes: lexer : lexer build from the grammar Methods added to the generated parsers: init_lexer(self) : return a lexer object to scan the tokens defined by the grammar : each rule is translated into a method with the same name N(sselfs init_lexerslexer(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__s cCsA|iiƒ}|i|ƒo|iiƒ|iSnt‚dS(sƒ eat the current token if it matches the expected token Parameters: name : name of the expected token N(sselfslexerstokensmatchsnamesnextsvalues WrongToken(sselfsnamestoken((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyseatŽs   cCs|ii|ƒ}|iSdS(sà eat the current token if it matches the expected token This method replaces eat for context sensitive lexers. Parameters: name : name of the expected token N(sselfslexerseatsnamestokensvalue(sselfsnamestoken((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyseatCSL›scOs|id|||ŽSdS(s  parse a string starting from the default axiom The default axiom is START. Parameters: input : input string to parse *args : argument list to pass to START **kws : argument dictionnary to pass to START sSTARTN(sselfsparsesinputsargsskws(sselfsinputsargsskws((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__call__¦s c OsàyG|ii|ƒt||ƒ||Ž}|ii ƒ o t ‚nWnŽt j o‚|ii t jod}ddf\}}n4|ii i}|ii i |ii if\}}t||fd|ƒ‚nX|SdS(s parse a string starting from a given axiom Parameters: axiom : rule name where the parser starts input : input string to parse *args : argument list to pass to START **kws : argument dictionnary to pass to START sisSyntax error near %sN(sselfslexersstartsinputsgetattrsaxiomsargsskwssvalueseofs WrongTokens last_tokensNoneslinescolumnstextsSyntacticError( sselfsaxiomsinputsargsskwss last_tokenscolumnsvaluesline((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysparse²s$cCs@|tjo(|iiƒ}|tjodSq5n|iSdS(s return the line number of a token Parameters: token : token object. If None, the current token line is returned. iN(stokensNonesselfslexersline(sselfstoken((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyslineÊs    cCs@|tjo(|iiƒ}|tjodSq5n|iSdS(s“ return the column number of a token Parameters: token : token object. If None, the current token column is returned. iN(stokensNonesselfslexerscolumn(sselfstoken((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyscolumnÖs    cCs-dk}|iddtƒ|i|ƒSdS(Ns-row is deprecated, please use column instead.scategory(swarningsswarnsDeprecationWarningsselfscolumnstoken(sselfstokenswarnings((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysrowäs cCs|iiƒSdS(s— return the current token This can be used to get the line or column number of a token or to extract text between two tokens. N(sselfslexerstoken(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysmarkêscCs|ii||ƒSdS(s² return the text found between two tokens Parameters : start : token object as returned by mark stop : token object as returned by mark N(sselfslexersextractsstartsstop(sselfsstartsstop((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysextractòscCs| o t‚n|SdS(sz check a condition and backtrack when it is False Parameters: cond : condition to be checked N(sconds WrongToken(sselfscond((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyscheckûs cCst|ƒ‚dS(s{ stop the parser and raise a SemanticError exception Parameters: msg : error message to raise N(s SemanticErrorsmsg(sselfsmsg((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyserrors(s__name__s __module__sParserMetaClasss __metaclass__s__init__seatseatCSLs__call__sparsesNoneslinescolumnsrowsmarksextractscheckserror(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysParserps       s VerboseParsercBs;tZdZd„Zd„Zd„Zd„Zd„ZRS(NicCsti|ƒd|_dS(s' VerboseParser is the base class for debugging parsers. This class can not have a doc string otherwise it would be considered as a grammar. The metaclass of this class is ParserMetaClass. It extends the Parser class to log the activity of the lexer. Attributes: lexer : lexer build from the grammar verbose : level of information 0 : no information 1 : print tokens successfully matched 2 : print tokens matched and not matched Methods added to the generated parsers: init_lexer(self) : return a lexer object to scan the tokens defined by the grammar : each rule is translated into a method with the same name iN(sParsers__init__sselfseatcnt(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__!s cCs¥|id7_|iiƒ}yBti||ƒ}|idjo|i |d|ƒGHn|SWn>t j o2|idjo|i |d|ƒGHn‚nXdS(sƒ eat the current token if it matches the expected token Parameters: name : name of the expected token is==is!=N( sselfseatcntslexerstokensParserseatsnamesvaluesverboses token_infos WrongToken(sselfsnamesvaluestoken((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyseat6sc Cs|id7_yQti||ƒ}|idjo'|iiƒ}|i |d|ƒGHn|SWn¸t j o¬|idjo’t d|ii |ii |ii d!iddƒd|ii|ii|ii|ii|ii |ii |ii ƒ }|i |d|ƒGHn‚nXd S( sà eat the current token if it matches the expected token This method replaces eat for context sensitive lexers. Parameters: name : name of the expected token is==is???i s s s!=N(sselfseatcntsParserseatCSLsnamesvaluesverboseslexerstokens token_infos WrongTokensTokensinputspossreplaceslinescolumn(sselfsnamesvaluestoken((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyseatCSLHszcOs&||_ti|||||ŽSdS(s parse a string starting from a given axiom Parameters: axiom : rule name where the parser starts input : input string to parse *args : argument list to pass to START **kws : argument dictionnary to pass to START N(saxiomsselfsParsersparsesinputsargsskws(sselfsaxiomsinputsargsskws((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysparse]s c CsÌ|i}g}d}t}x_||ijoN|d7}ti|dƒi i }t |ƒdjo|i d|ƒqqWdi |ƒ}d|i|i|i|if}d||||||fSdS(sí return information about a token Parameters: token : token read by the lexer op : result of the comparison made by the lexer (== or !=) expected : name of the expected token iii s.s (%d,%d) %s %ss[%3d][%2d]%s: %s %s %sN(sselfseatcnts callernamess stackdepthsNonesnamesaxiomssyss _getframesf_codesco_nameslensinsertsjoinstokenslinescolumnstextsfoundsopsexpected( sselfstokensopsexpecteds stackdepthsnamesfounds callernamesseatcnt((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys token_infois  "(s__name__s __module__sverboses__init__seatseatCSLsparses token_info(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys VerboseParser s     s^\s*$s^\s*stpgcBs>tZdZeZeZeZeZeZeZe Z e Z RS(sg This class contains some TPG classes to make the parsers usable inside and outside the tpg module ( s__name__s __module__s__doc__sNamedGroupLexersLexersCacheNamedGroupLexers CacheLexersContextSensitiveLexersParsers WrongTokensre(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pystpgs s TPGParsercBsÇtZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z d „Zd„Zd„Zd„Zd„Zd„Zed„Zd„Zed„Zd„Zd„Zdfd„ƒYZdfd„ƒYZdfd„ƒYZdefd„ƒYZd fd!„ƒYZd"efd#„ƒYZd$e fd%„ƒYZ!d&fd'„ƒYZ"d(efd)„ƒYZ#d*efd+„ƒYZ$d,e fd-„ƒYZ%d.fd/„ƒYZ&d0fd1„ƒYZ'd2fd3„ƒYZ(d4fd5„ƒYZ)d6e fd7„ƒYZ*d8efd9„ƒYZ+d:„Z,d;efd<„ƒYZ-d=efd>„ƒYZ.d?efd@„ƒYZ/dAefdB„ƒYZ0dCe1fdD„ƒYZ2dE„Z3dF„Z4dG„Z5RS(HNs’ # This class parses TPG grammar # and generate the Python source and compiled code for the parser set lexer = NamedGroupLexer set lexer_verbose separator spaces '\s+' ; separator comment '\#.*' ; token string ''' "{3} [^"\\]* (?: (?: \\. | "(?!"") ) [^"\\]* )* "{3} | " [^"\\\n]* (?: \\. [^"\\\n]* )* " | '{3} [^'\\]* (?: (?: \\. | '(?!'') ) [^'\\]* )* '{3} | ' [^'\\\n]* (?: \\. [^'\\\n]* )* ' ''' ; token code ''' \{\{ ( \}? [^\}]+ )* \}\} | \$ [^\$\n]* \$ | \$ .*\n ( [ \t]* \$ .*\n )* ''' $ self.Code token ident '\w+' ; token lcbra '\{' ; token rcbra '\}' ; token star2 '\*\*' ; token star '\*' ; START/$self.gen(options, tokens, rules)$ -> OPTIONS/options TOKENS/tokens RULES/rules ; OPTIONS/options -> $ options = self.Options(self) ( 'set' ident/name ( '=' ident/value $ options.set(name, value) | $ options.set(name, 'True') ) )* ; TOKENS/ts -> $ ts = [] ( TOKEN/t $ ts.append(t) )* ; TOKEN/$token_type(name, expr, code)$ -> ( 'separator' $ token_type = self.DefSeparator | 'token' $ token_type = self.DefToken ) ident/name ':'? @t string/expr $ self.re_check(expr, t) ( PY_EXPR/code ';'? | ';' $ code = None ) ; RULES/rs -> $ rs = self.Rules() ( RULE/r $ rs.append(r) )* ; RULE/$self.Rule(head, body)$ -> HEAD/head '->' OR_EXPR/body ';' ; #HEAD/$self.Symbol(name, args, ret)$ -> ident/name OPT_ARGS/args RET/ret ; HEAD/$self.Symbol(name, args, ret)$ -> ident/name OPT_ARGS/args RET<$self.PY_Ident(name)$>/ret ; OR_EXPR/$self.balance(or_expr)$ -> AND_EXPR/a $ or_expr = [a] ( check $ not or_expr[-1].empty() $ '\|' AND_EXPR/a $ or_expr.append(a) )* ; AND_EXPR/$and_expr$ -> $ and_expr = self.And() ( ATOM_EXPR/a REP/a $ and_expr.append(a) )* ; ATOM_EXPR/a -> SYMBOL/a | INLINE_TOKEN/a | @t code/a $ self.code_check(a, t) | '\(' OR_EXPR/a '\)' | 'check' PY_EXPR/cond $ a = self.Check(cond) | 'error' PY_EXPR/msg $ a = self.Error(msg) | '@' PY_EXPR/mark $ a = self.Mark(mark) ; REP/a -> ( '\*' $ a = self.Rep(a, 0, None) | '\+' $ a = self.Rep(a, 1, None) | '\?' $ a = self.Rep(a, 0, 1) | '\{' ( PY_EXPR/min | $ min = self.PY_Ident("0") $ ) ( ',' ( PY_EXPR/max | $ max = self.PY_Ident("None") $ ) | $ max = min $ ) '\}' $ a = self.Rep(a, min, max) )? ; #SYMBOL/$self.Symbol(name, args, ret)$ -> ident/name OPT_ARGS/args RET/ret ; SYMBOL/$self.Symbol(name, args, ret)$ -> ident/name OPT_ARGS/args RET<$self.PY_Ident(name)$>/ret ; INLINE_TOKEN/$self.InlineToken(expr, ret)$ -> @t string/expr $ self.re_check(expr, t) RET/ret ; OPT_ARGS/args -> ARGS/args | $ args = self.Args() $ ; ARGS/args -> '<' $ args = self.Args() ( ARG/arg $ args.append(arg) ( ',' ARG/arg $ args.append(arg) )* ','? )? '>' ; ARG/a -> ident/name '=' PY_EXPR/a $ a = self.PY_KeywordArgument(name, a) | PY_EXPR/a $ a = self.PY_PositionArgument(a) | '\*' ident/name $ a = self.PY_PositionArgumentList(name) | '\*\*' ident/name $ a = self.PY_KeywordArgumentList(name) ; #RET/ret -> '/' PY_EXPR/ret | $ ret = None $ ; RET/ret -> ( '/' PY_EXPR/ret )? ; PY_EXPR/expr -> ident/name $ expr = self.PY_Ident(name) | string/st $ expr = self.PY_Ident(st) | code/expr | ARGS/expr ; cCsætittiiƒ}|iddƒ|iddƒ|iddƒ|iddƒ|id d ƒ|id d ƒ|id dƒ|iddƒ|iddƒ|iddƒ|iddƒ|iddƒ|iddƒ|iddƒ|iddƒ|idd ƒ|id!d"ƒ|id#d$ƒ|id%d&ƒ|id'd(ƒ|id)d*ƒ|id+d,ƒ|id-d.|i ƒ|id/d0ƒ|id1d2ƒ|id3d4ƒ|id5d6ƒ|id7d8ƒ|SdS(9Ns_tok_1ssets_tok_2s=s_tok_3s separators_tok_4stokens_tok_5s:s_tok_6s;s_tok_7s->s_tok_8s\|s_tok_9s\(s_tok_10s\)s_tok_11schecks_tok_12serrors_tok_13s@s_tok_14s\+s_tok_15s\?s_tok_16s,s_tok_17ss_tok_19s/sspacess\s+scomments\#.*sstringsi "{3} [^"\\]* (?: (?: \\. | "(?!"") ) [^"\\]* )* "{3} | " [^"\\\n]* (?: \\. [^"\\\n]* )* " | '{3} [^'\\]* (?: (?: \\. | '(?!'') ) [^'\\]* )* '{3} | ' [^'\\\n]* (?: \\. [^'\\\n]* )* ' scodesR \{\{ ( \}? [^\}]+ )* \}\} | \$ [^\$\n]* \$ | \$ .*\n ( [ \t]* \$ .*\n )* sidents\w+slcbras\{srcbras\}sstar2s\*\*sstars\*( stpgsNamedGroupLexersTruesresVERBOSEslexers def_tokens def_separatorsselfsCode(sselfslexer((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys init_lexer/s@   cCs;|iƒ}|iƒ}|iƒ}|i|||ƒSdS(s START -> OPTIONS TOKENS RULES N(sselfsOPTIONSsoptionssTOKENSstokenssRULESsrulessgen(sselfstokenssrulessoptions((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysSTARTgs    cCs÷|i|ƒ}xÝtoÕ|iiƒ}y˜|idƒ|idƒ}|iiƒ}y0|idƒ|idƒ}|i ||ƒWn6t i j o'|ii|ƒ|i |dƒnXWqt i j o|ii|ƒPqXqW|SdS(s* OPTIONS -> ('set' ident ('=' ident | ))* s_tok_1sidents_tok_2sTrueN(sselfsOptionssoptionssTrueslexerstokens_p1seatsnames_p2svaluessetstpgs WrongTokensback(sselfsnamesvalues_p1s_p2soptions((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysOPTIONSns(   cCssg}xbtoZ|iiƒ}y|iƒ}|i|ƒWq t i j o|ii |ƒPq Xq W|SdS(s TOKENS -> (TOKEN)* N( stssTruesselfslexerstokens_p1sTOKENstsappendstpgs WrongTokensback(sselfstssts_p1((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysTOKENSƒs  c Cs£|iiƒ}y|idƒ|i}Wn<tij o-|ii |ƒ|idƒ|i }nX|idƒ}|iiƒ}y|idƒWn&tij o|ii |ƒnX|i ƒ} |idƒ}|i|| ƒ|iiƒ}yY|iƒ}|iiƒ}y|idƒWn&tij o|ii |ƒnXWn9tij o*|ii |ƒ|idƒt}nX||||ƒSdS(sI TOKEN -> ('separator' | 'token') ident ':'? string (PY_EXPR ';'? | ';') s_tok_3s_tok_4sidents_tok_5sstrings_tok_6N(sselfslexerstokens_p1seats DefSeparators token_typestpgs WrongTokensbacksDefTokensnames_p2smarkstsexprsre_checks_p3sPY_EXPRscodes_p4sNone( sselfs_p4scodesnamesexprs token_types_p1s_p2s_p3st((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysTOKENs>       cCsy|iƒ}xbtoZ|iiƒ}y|iƒ}|i |ƒWqt i j o|ii |ƒPqXqW|SdS(s RULES -> (RULE)* N( sselfsRulessrssTrueslexerstokens_p1sRULEsrsappendstpgs WrongTokensback(sselfsrssrs_p1((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysRULES±s   cCsF|iƒ}|idƒ|iƒ}|idƒ|i||ƒSdS(s RULE -> HEAD '->' OR_EXPR ';' s_tok_7s_tok_6N(sselfsHEADsheadseatsOR_EXPRsbodysRule(sselfsbodyshead((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysRULE¾s     cCsJ|idƒ}|iƒ}|i|i|ƒƒ}|i|||ƒSdS(s HEAD -> ident OPT_ARGS RET sidentN( sselfseatsnamesOPT_ARGSsargssRETsPY_IdentsretsSymbol(sselfsargssnamesret((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysHEADÆs  cCs°|iƒ}|g}x‡to|iiƒ}yB|i|di ƒ ƒ|i dƒ|iƒ}|i |ƒWqt i j o|ii|ƒPqXqW|i|ƒSdS(s& OR_EXPR -> AND_EXPR ('\|' AND_EXPR)* iÿÿÿÿs_tok_8N(sselfsAND_EXPRsasor_exprsTrueslexerstokens_p1schecksemptyseatsappendstpgs WrongTokensbacksbalance(sselfsasor_exprs_p1((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysOR_EXPRÍs     cCsˆ|iƒ}xqtoi|iiƒ}y,|iƒ}|i |ƒ}|i |ƒWqt i j o|ii |ƒPqXqW|SdS(s AND_EXPR -> (ATOM_EXPR REP)* N(sselfsAndsand_exprsTrueslexerstokens_p1s ATOM_EXPRsasREPsappendstpgs WrongTokensback(sselfsas_p1sand_expr((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysAND_EXPRÝs   cCs|iiƒ}y¡y|iƒ}WnŠtij o{|ii|ƒy|i ƒ}Wq¯tij oB|ii|ƒ|i ƒ}|i dƒ}|i ||ƒq¯XnXWnKtij o<|ii|ƒyy*|i dƒ|iƒ}|i dƒWnNtij o?|ii|ƒ|i dƒ|iƒ}|i|ƒ}nXWqþtij o”|ii|ƒy,|i dƒ|iƒ}|i|ƒ}Wqùtij o?|ii|ƒ|i dƒ|iƒ}|i|ƒ}qùXqþXnX|SdS(sq ATOM_EXPR -> SYMBOL | INLINE_TOKEN | code | '\(' OR_EXPR '\)' | 'check' PY_EXPR | 'error' PY_EXPR | '@' PY_EXPR scodes_tok_9s_tok_10s_tok_11s_tok_12s_tok_13N(sselfslexerstokens_p1sSYMBOLsastpgs WrongTokensbacks INLINE_TOKENsmarkstseats code_checksOR_EXPRsPY_EXPRscondsChecksmsgsErrorsMark(sselfsasmarksconds_p1smsgst((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys ATOM_EXPRësL         cCs]|iiƒ}yyuy&|idƒ|i|dtƒ}WnHti j o9|ii |ƒ|idƒ|i|dtƒ}nXWn¡ti j o’|ii |ƒy&|idƒ|i|ddƒ}Wq+ti j oC|ii |ƒ|idƒ|iiƒ}y|i ƒ}Wn5ti j o&|ii |ƒ|idƒ}nX|iiƒ}yh|idƒ|iiƒ}y|i ƒ}Wn5ti j o&|ii |ƒ|id ƒ}nXWn,ti j o|ii |ƒ|}nX|id ƒ|i|||ƒ}q+XnXWn&ti j o|ii |ƒnX|Sd S( sM REP -> ('\*' | '\+' | '\?' | '\{' (PY_EXPR | ) (',' (PY_EXPR | ) | ) '\}')? sstaris_tok_14is_tok_15slcbras0s_tok_16sNonesrcbraN(sselfslexerstokens_p1seatsRepsasNonestpgs WrongTokensbacks_p2sPY_EXPRsminsPY_Idents_p3s_p4smax(sselfsasminsmaxs_p4s_p1s_p2s_p3((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysREPsT       #cCsJ|idƒ}|iƒ}|i|i|ƒƒ}|i|||ƒSdS(s SYMBOL -> ident OPT_ARGS RET sidentN( sselfseatsnamesOPT_ARGSsargssRETsPY_IdentsretsSymbol(sselfsargssnamesret((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysSYMBOL?s  cCsK|iƒ}|idƒ}|i||ƒ|iƒ}|i||ƒSdS(s INLINE_TOKEN -> string RET sstringN( sselfsmarkstseatsexprsre_checksRETsrets InlineToken(sselfsexprstsret((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys INLINE_TOKENFs   cCs\|iiƒ}y|iƒ}Wn2tij o#|ii|ƒ|i ƒ}nX|SdS(s OPT_ARGS -> ARGS | N( sselfslexerstokens_p1sARGSsargsstpgs WrongTokensbacksArgs(sselfsargss_p1((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysOPT_ARGSNscCs>|idƒ|iƒ}|iiƒ}yØ|iƒ}|i |ƒxot og|iiƒ}y*|idƒ|iƒ}|i |ƒWqGt i j o|ii|ƒPqGXqGW|iiƒ}y|idƒWn&t i j o|ii|ƒnXWn&t i j o|ii|ƒnX|idƒ|SdS(s( ARGS -> '<' (ARG (',' ARG)* ','?)? '>' s_tok_17s_tok_16s_tok_18N(sselfseatsArgssargsslexerstokens_p1sARGsargsappendsTrues_p2stpgs WrongTokensbacks_p3(sselfsargss_p1s_p2sargs_p3((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysARGSXs4        cCsI|iiƒ}y†y>|idƒ}|idƒ|iƒ}|i||ƒ}WnAt i j o2|ii |ƒ|iƒ}|i |ƒ}nXWn©t i j oš|ii |ƒy/|idƒ|idƒ}|i |ƒ}WqAt i j oB|ii |ƒ|idƒ|idƒ}|i|ƒ}qAXnX|SdS(s@ ARG -> ident '=' PY_EXPR | PY_EXPR | '\*' ident | '\*\*' ident sidents_tok_2sstarsstar2N(sselfslexerstokens_p1seatsnamesPY_EXPRsasPY_KeywordArgumentstpgs WrongTokensbacksPY_PositionArgumentsPY_PositionArgumentListsPY_KeywordArgumentList(sselfsas_p1sname((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysARGss0     cCs]|iiƒ}y|idƒ|iƒ}Wn&tij o|ii |ƒnX|SdS(s RET -> ('/' PY_EXPR)? s_tok_19N( sselfslexerstokens_p1seatsPY_EXPRsretstpgs WrongTokensback(sselfsrets_p1((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysRETs cCsõ|iiƒ}ymy"|idƒ}|i|ƒ}WnDti j o5|ii |ƒ|idƒ}|i|ƒ}nXWnnti j o_|ii |ƒy|idƒ}Wqíti j o#|ii |ƒ|i ƒ}qíXnX|SdS(s) PY_EXPR -> ident | string | code | ARGS sidentsstringscodeN( sselfslexerstokens_p1seatsnamesPY_Identsexprstpgs WrongTokensbacksstsARGS(sselfsnamesexprssts_p1((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysPY_EXPR—s$cCs4ti|ƒ|tj o ||_n h|_dS(N(sParsers__init__sselfs_globalssNonesenv(sselfs_globals((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__¬s   cCs\ytitd|ƒƒWn:tj o.}t|i|i fd||fƒ‚nXdS(Nsrs#Invalid regular expression: %s (%s)( s sre_parsesparsesevalsexprs Exceptionses LexicalErrorstokslinescolumn(sselfsexprstokse((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysre_check³scCs¨yti|iƒWntj o}digi}t|ii ƒƒD]$\}}|d|d|fƒqJ~ƒ}t |i|ifd||fƒ‚nXdS(Ns s%2d: %sisInvalid Python code (%s): %s(sparserssuitescodes Exceptionsesjoinsappends_[1]s enumerates splitlinessislserroneous_codes LexicalErrorstokslinescolumn(sselfscodestoks_[1]sesislserroneous_code((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys code_check¹s SsOptionscBsLtZhdhde<de<de<de<deq>~ƒpdSdS(Ns+s tpg.re.%si( sselfslexer_ignorecases lexer_localeslexer_multilines lexer_dotalls lexer_verboses lexer_unicodesoptionssjoinsappends_[1]sopt(sselfs_[1]soptsoptions((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyslexer_compile_optionsäs*( s__name__s __module__sNamedGroupLexersLexersCacheNamedGroupLexers CacheLexersContextSensitiveLexersTruesFalses option_dicts__init__ssetslexer_compile_options(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysOptionsÀs ÿ*  sEmptycBstZd„ZRS(NcCstSdS(N(sTrue(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysemptyïs(s__name__s __module__sempty(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysEmptyîssNotEmptycBstZd„ZRS(NcCstSdS(N(sFalse(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysemptyós(s__name__s __module__sempty(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysNotEmptyòssCodecBs>tZd„Zd„Zeeed„Zd„Zd„ZRS(NcCsì|idƒoh|idƒo|dd!iƒ}qµgi}|iƒD] }||iddƒdƒqK~}n>|idƒo |idƒo|dd!iƒ}nt ‚x-|ot i |dƒo|i dƒq¸Wx-|ot i |dƒo|i dƒqèW|o•gi}|D](}|t ti |ƒidƒƒƒq*~}|d}t|ƒ|jo t ‚ngi}|D]}|||ƒq~}nd igi}|D]}||d ƒqÅ~ƒ|_dS( Ns$iiÿÿÿÿs{{s}}iiþÿÿÿiss (scodes startswithsendswiths splitlinesslinessappends_[1]slinessplits WrongTokens blank_line_resmatchspopslens indent_resgroupsindentssindentsminsjoinsself(sselfscodesindentsliness_[1]sindentssline((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__÷s(A ?  /ccs dStVdS(N(sNone(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysget_inline_tokens scCsT|tjo|iiƒSn3gi}|iiƒD]}|||ƒq5~SdS(N( sindentsNonesselfscodesstripsappends_[1]s splitlinessline(sselfsindentscounterssposs_[1]sline((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_codes cCsdS(N((sselfstokens((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyslinks_symbols_to_tokensscCsdSdS(Ns((sselfsparent((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_docs(s__name__s __module__s__init__sget_inline_tokenssNonesgen_codeslinks_symbols_to_tokenssgen_doc(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysCodeös    sDefTokencBs#tZdZed„Zd„ZRS(Ns def_tokencCsR||_||_|tj o|iƒidƒdjo t‚n||_dS(Ns i(snamesselfsexprscodesNonesgen_codescounts WrongToken(sselfsnamesexprscode((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__s   ) cCsg|i}|itjod|i|i|fSn0|iiƒiƒ}d|i|i||fSdS(Nslexer.%s('%s', r%s)slexer.%s('%s', r%s, %s)(sselfsexprscodesNones def_methodsnamesgen_codesstrip(sselfsexprscode((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_def s  (s__name__s __module__s def_methodsNones__init__sgen_def(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysDefTokens s DefSeparatorcBstZdZRS(Ns def_separator(s__name__s __module__s def_method(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys DefSeparator(ssRulescBs#tZd„Zd„Zd„ZRS(Nccs0x)|D]!}x|iƒD] }|VqWqWdS(N(sselfsrulesget_inline_tokensstoken(sselfstokensrule((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysget_inline_tokens,s  cCs"x|D]}|i|ƒqWdS(N(sselfsruleslinks_symbols_to_tokensstokens(sselfstokenssrule((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyslinks_symbols_to_tokens0sccsx|D]}|iƒVqWdS(N(sselfsrulesgen_code(sselfsrule((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_code3s(s__name__s __module__sget_inline_tokensslinks_symbols_to_tokenssgen_code(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysRules+s  sRulecBsBtZdefd„ƒYZd„Zd„Zd„Zd„ZRS(NsCounterscBstZd„ZRS(NcCs2|i|dƒ}|d|| %s """( sselfsCountersscounterssheadsnamesgen_defstabsgen_docsbodys gen_init_retsgen_codesNonesgen_ret(sselfscounters((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_codeHs (s__name__s __module__sdictsCounterss__init__sget_inline_tokensslinks_symbols_to_tokenssgen_code(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysRule7s    sSymbolcBsPtZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z RS( NcCs||_||_||_dS(N(snamesselfsargssret(sselfsnamesargssret((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__Ss  ccs dStVdS(N(sNone(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysget_inline_tokensWscCsM|i|itƒ|_|itj o|iotd|iƒ‚ndS(NsToken %s can not have arguments(stokenssgetsselfsnamesNonestokensargss SemanticError(sselfstokens((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyslinks_symbols_to_tokensZscCsd|i|iiƒfSdS(Nsdef %s(self, %s):(sselfsnamesargssgen_code(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_def^scCs3|iiƒ|ijo|d|ipfSdS(Ns %s = None(sselfsretsgen_codesnamesindent(sselfsindent((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys gen_init_ret`scCs*|io|d|iiƒpfSdS(Ns return %s(sselfsretsindentsgen_code(sselfsindent((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_retbscCs»|itj oK|itj o%|d|iiƒ|iifSq·|d|iiSn]|itj o.|d|iiƒ|i|iiƒfSn|d|i|iiƒfSdS(Ns%s = self.eat('%s')sself.eat('%s')s%s = self.%s(%s)s self.%s(%s)(sselfstokensNonesretsindentsgen_codesnamesargs(sselfsindentscountersspos((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_codeds%.cCs |iSdS(N(sselfsname(sselfsparent((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_docos( s__name__s __module__s__init__sget_inline_tokensslinks_symbols_to_tokenssgen_defs gen_init_retsgen_retsgen_codesgen_doc(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysSymbolRs       s InlineTokencBsGtZd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(NcCs||_||_dS(N(sexprsselfsret(sselfsexprsret((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__ss ccs|VdS(N(sself(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysget_inline_tokensvscCs ||_dS(N(stokensselfsexplicit_token(sselfstoken((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysset_explicit_tokenxscCs|iiƒSdS(N(sselfsexplicit_tokensgen_def(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_defzscCsdS(N((sselfstokens((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyslinks_symbols_to_tokens|scCsZ|itj o+|d|iiƒ|ii|ifSn|d|ii|ifSdS(Ns%s = self.eat('%s') # %ssself.eat('%s') # %s(sselfsretsNonesindentsgen_codesexplicit_tokensnamesexpr(sselfsindentscountersspos((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_code~s+cCs |iSdS(N(sselfsexpr(sselfsparent((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_docƒs( s__name__s __module__s__init__sget_inline_tokenssset_explicit_tokensgen_defslinks_symbols_to_tokenssgen_codesgen_doc(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys InlineTokenrs      sArgscBstZd„ZRS(NcCs8digi}|D]}||iƒƒq~ƒSdS(Ns, (sjoinsappends_[1]sselfsasgen_code(sselfs_[1]sa((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_code‡s(s__name__s __module__sgen_code(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysArgs†ssPY_PositionArgumentcBstZd„Zd„ZRS(NcCs ||_dS(N(sargsself(sselfsarg((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__‹scCs|iiƒSdS(N(sselfsargsgen_code(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_codes(s__name__s __module__s__init__sgen_code(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysPY_PositionArgumentŠs sPY_KeywordArgumentcBstZd„Zd„ZRS(NcCs||_||_dS(N(snamesselfsarg(sselfsnamesarg((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__‘s cCsd|i|iiƒfSdS(Ns%s=%s(sselfsnamesargsgen_code(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_code”s(s__name__s __module__s__init__sgen_code(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysPY_KeywordArguments sPY_PositionArgumentListcBstZd„Zd„ZRS(NcCs ||_dS(N(snamesself(sselfsname((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__˜scCsd|iSdS(Ns*%s(sselfsname(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_codešs(s__name__s __module__s__init__sgen_code(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysPY_PositionArgumentList—s sPY_KeywordArgumentListcBstZd„Zd„ZRS(NcCs ||_dS(N(snamesself(sselfsname((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__žscCsd|iSdS(Ns**%s(sselfsname(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_code s(s__name__s __module__s__init__sgen_code(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysPY_KeywordArgumentLists sAndcBs5tZd„Zd„Zd„Zd„Zd„ZRS(NcCs/x$|D]}|iƒ otSqqWtSdS(N(sselfsasemptysFalsesTrue(sselfsa((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysempty¤s  ccs0x)|D]!}x|iƒD] }|VqWqWdS(N(sselfsasget_inline_tokensstoken(sselfsastoken((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysget_inline_tokens©s  cCs"x|D]}|i|ƒqWdS(N(sselfsaslinks_symbols_to_tokensstokens(sselfstokenssa((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyslinks_symbols_to_tokens­scCs\|oQ|di|||ƒgi}|dD]}||i||tƒƒq/~gSdS(Nii( sselfsgen_codesindentscountersspossappends_[1]sasNone(sselfsindentscountersspossas_[1]((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_code°scCsOg}x5|D]-}|i|ƒ}|o|i|ƒq q Wdi|ƒSdS(Ns (sdocssselfsasgen_docsdocsappendsjoin(sselfsparentsasdocssdoc((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_docµs(s__name__s __module__semptysget_inline_tokensslinks_symbols_to_tokenssgen_codesgen_doc(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysAnd£s     sOrcBs5tZd„Zd„Zd„Zd„Zd„ZRS(NcCs||_||_dS(N(sasselfsb(sselfsasb((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__¾s ccs@x|iiƒD] }|VqWx|iiƒD] }|Vq.WdS(N(sselfsasget_inline_tokensstokensb(sselfstoken((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysget_inline_tokensÁs cCs$|ii|ƒ|ii|ƒdS(N(sselfsaslinks_symbols_to_tokensstokenssb(sselfstokens((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyslinks_symbols_to_tokensÆsc Cs‰|p |dƒ}|tjo |d|pf|d|ii|t||ƒ|d|td||i i|t||ƒgSdS(Nsps%s = self.lexer.token()stry:sexcept tpg.WrongToken:sself.lexer.back(%s)( sposscountersspsNonesindentsselfsasgen_codestabsb(sselfsindentscountersspossp((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_codeÉscCsdd|ii|ƒ|ii|ƒf}t|tiƒot |ƒdjod|}n|SdS(Ns%s | %sis(%s)( sselfsasgen_docsbsdocs isinstancesparents TPGParsersAndslen(sselfsparentsdoc((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_docÓs(&(s__name__s __module__s__init__sget_inline_tokensslinks_symbols_to_tokenssgen_codesgen_doc(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysOr½s     cCs]t|ƒdjo |dSn;t|ƒd}|i|i|| ƒ|i||ƒƒSdS(Niii(slensxssmsselfsOrsbalance(sselfsxssm((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysbalanceÙs sRepcBs5tZd„Zd„Zd„Zd„Zd„ZRS(NcCs||_||_||_dS(N(sasselfsminsmax(sselfsasminsmax((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__ás  ccs"x|iiƒD] }|VqWdS(N(sselfsasget_inline_tokensstoken(sselfstoken((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysget_inline_tokensåscCs|ii|ƒdS(N(sselfsaslinks_symbols_to_tokensstokens(sselfstokens((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyslinks_symbols_to_tokensèsc Cs|i|ifddfjop|p |dƒ}|tjo |d|pf|d|ii |t ||ƒ|d|t d|gSn|i|ifdtfjo†|p |dƒ}|d|t d||t d|ii |t t ||ƒ|t d|t t d||t t d gSnè|i|ifdtfjoÃ|p |dƒ}|d ƒ}|d ||d|t d||t d|ii |t t ||ƒ|t t d ||t d|t t d ||t t d||t t d g Sn|p |dƒ}|d ƒ}|ii ƒ}|ii ƒ}|d ||d|djodpd||f|t d||t d|ii |t t ||ƒ|t t d ||t d|t t d||f|t t d||t t d g SdS(Niisps%s = self.lexer.token()stry:sexcept tpg.WrongToken:sself.lexer.back(%s)s while True:sbreaksns%s = 0s%s += 1sif %s < 1: raises while %s:sNonesTrues%s < %ssif %s < %s: raise( sselfsminsmaxsposscountersspsNonesindentsasgen_codestabsn(sselfsindentscountersspossminsmaxsnsp((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_codeês]s  ¤ cCsC|ii|ƒ}t|ititifƒod|}n|i|i fddfjo d}nÊ|i|i fdt fjo d}n¡|i|i fdt fjo d}nx|ii ƒ}|i i ƒ}||jod|}n?|djo d }n|d jo d }nd ||f}d ||fSdS( Ns(%s)iis?s*s+s{%s}s0ssNones{%s,%s}s%s%s( sselfsasgen_docsdocs isinstances TPGParsersAndsOrsminsmaxsrepsNonesgen_code(sselfsparentsminsdocsmaxsrep((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_doc#s&      (s__name__s __module__s__init__sget_inline_tokensslinks_symbols_to_tokenssgen_codesgen_doc(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysRepàs     9sCheckcBs5tZd„Zd„Zd„Zd„Zd„ZRS(NcCs ||_dS(N(scondsself(sselfscond((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__9sccs dStVdS(N(sNone(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysget_inline_tokens;scCsdS(N((sselfstokens((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyslinks_symbols_to_tokens>scCsdSdS(Ns((sselfsparent((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_doc@scCs|d|iiƒSdS(Nsself.check(%s)(sindentsselfscondsgen_code(sselfsindentscountersspos((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_codeBs(s__name__s __module__s__init__sget_inline_tokensslinks_symbols_to_tokenssgen_docsgen_code(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysCheck8s     sErrorcBs5tZd„Zd„Zd„Zd„Zd„ZRS(NcCs ||_dS(N(smsgsself(sselfsmsg((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__Fsccs dStVdS(N(sNone(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysget_inline_tokensHscCsdS(N((sselfstokens((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyslinks_symbols_to_tokensKscCsdSdS(Ns((sselfsparent((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_docMscCs|d|iiƒSdS(Nsself.error(%s)(sindentsselfsmsgsgen_code(sselfsindentscountersspos((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_codeOs(s__name__s __module__s__init__sget_inline_tokensslinks_symbols_to_tokenssgen_docsgen_code(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysErrorEs     sMarkcBs5tZd„Zd„Zd„Zd„Zd„ZRS(NcCs ||_dS(N(smarksself(sselfsmark((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys__init__Ssccs dStVdS(N(sNone(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysget_inline_tokensUscCsdS(N((sselfstokens((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pyslinks_symbols_to_tokensXscCsdSdS(Ns((sselfsparent((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_docZscCs|d|iiƒSdS(Ns%s = self.mark()(sindentsselfsmarksgen_code(sselfsindentscountersspos((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_code\s(s__name__s __module__s__init__sget_inline_tokensslinks_symbols_to_tokenssgen_docsgen_code(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysMarkRs     sPY_IdentcBstZd„ZRS(NcCst|ƒSdS(N(sstrsself(sself((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysgen_code`s(s__name__s __module__sgen_code(((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pysPY_Ident_scgsUxN|D]F}t|ttfƒo"x'|i|ŒD] }|Vq3Wq|dVqWdS(Ns (slinesssubliness isinstancesliststuplesselfs flatten_nlsline(sselfslinesssublinessline((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys flatten_nlcs cFsFdi|i|Œƒ}h}||i|U||}|||fSdS(Ns(sjoinsselfs flatten_nlssourceslocal_namespacesenvs attributescode(sselfs attributessourcescodeslocal_namespace((s2/mnt/gmirror/ports/devel/tpg/work/TPG-3.1.1/tpg.pys make_codeks   c cs|i} |i}|iƒ}h} x"|D]} | | | i dd!~gi}|D]} |t| iƒƒql~td ƒVh}x|D]} | || ii