diff options
author | Tomas Kukosa <tomas.kukosa@siemens.com> | 2005-07-18 20:45:46 +0000 |
---|---|---|
committer | Tomas Kukosa <tomas.kukosa@siemens.com> | 2005-07-18 20:45:46 +0000 |
commit | aa6a15ebdeb0a6e086230fcef65018a197dbb827 (patch) | |
tree | f4840ac327543cad7becb7567528a94a25c506e1 /tools | |
parent | 1dd2e0e8f4428b5cd45227ddb34676d2c0d06327 (diff) |
PLY package updated to version 1.6
svn path=/trunk/; revision=14951
Diffstat (limited to 'tools')
-rw-r--r-- | tools/asn2eth.py | 4 | ||||
-rw-r--r-- | tools/lex.py | 13 | ||||
-rw-r--r-- | tools/yacc.py | 36 |
3 files changed, 23 insertions, 30 deletions
diff --git a/tools/asn2eth.py b/tools/asn2eth.py index da3b33115c..1ffa4cec9d 100644 --- a/tools/asn2eth.py +++ b/tools/asn2eth.py @@ -17,8 +17,8 @@ # http://www.pobox.com/~asl2/software/PyZ3950/ # (ASN.1 to Python compiler functionality is broken but not removed, it could be revived if necessary) # -# It requires Dave Beazley's PLY parsing package licensed under the LGPL (tested with version 1.5) -# http://systems.cs.uchicago.edu/ply/ +# It requires Dave Beazley's PLY parsing package licensed under the LGPL (tested with version 1.6) +# http://www.dabeaz.com/ply/ # # # ITU-T Recommendation X.680 (07/2002), diff --git a/tools/lex.py b/tools/lex.py index 9fc9ab5e5a..4d3056f834 100644 --- a/tools/lex.py +++ b/tools/lex.py @@ -1,12 +1,9 @@ #----------------------------------------------------------------------------- # ply: lex.py # -# Author: David M. Beazley (beazley@cs.uchicago.edu) -# Department of Computer Science -# University of Chicago -# Chicago, IL 60637 +# Author: David M. Beazley (dave@dabeaz.com) # -# Copyright (C) 2001, David M. Beazley +# Copyright (C) 2001-2005, David M. Beazley # # $Header: /cvs/projects/PLY/lex.py,v 1.1.1.1 2004/05/21 15:34:10 beazley Exp $ # @@ -190,7 +187,7 @@ scanner you have defined. # ----------------------------------------------------------------------------- -__version__ = "1.4" +__version__ = "1.6" import re, types, sys, copy @@ -240,13 +237,15 @@ class Lexer: c.lexdata = self.lexdata c.lexpos = self.lexpos c.lexlen = self.lexlen - c.lenindexfunc = self.lexindexfunc + c.lexindexfunc = self.lexindexfunc c.lexerrorf = self.lexerrorf c.lextokens = self.lextokens c.lexignore = self.lexignore + c.debug = self.debug c.lineno = self.lineno c.optimize = self.optimize c.token = c.realtoken + return c # ------------------------------------------------------------ # input() - Push a new string into the lexer diff --git a/tools/yacc.py b/tools/yacc.py index 36db5b1900..7e1d1cbc7a 100644 --- a/tools/yacc.py +++ b/tools/yacc.py @@ -1,12 +1,9 @@ #----------------------------------------------------------------------------- # ply: yacc.py # -# Author(s): David M. Beazley (beazley@cs.uchicago.edu) -# Department of Computer Science -# University of Chicago -# Chicago, IL 60637 +# Author(s): David M. Beazley (dave@dabeaz.com) # -# Copyright (C) 2001-2004, David M. Beazley +# Copyright (C) 2001-2005, David M. Beazley # # $Header: /cvs/projects/PLY/yacc.py,v 1.6 2004/05/26 20:51:34 beazley Exp $ # @@ -51,7 +48,7 @@ # own risk! # ---------------------------------------------------------------------------- -__version__ = "1.5" +__version__ = "1.6" #----------------------------------------------------------------------------- # === User configurable parameters === @@ -546,7 +543,7 @@ class Production: self.lr1_added = 0 # Flag indicating whether or not added to LR1 self.usyms = [ ] self.lookaheads = { } - self.lk_added = 0 + self.lk_added = { } self.setnumbers = [ ] def __str__(self): @@ -1502,15 +1499,16 @@ def lr1_closure(I, setnumber = 0): if jlr_index < len(jprod) - 1 and Nonterminals.has_key(jprod[jlr_index+1]): first_syms = [] - if j.lk_added < len(j.lookaheads[setnumber]): - for a in j.lookaheads[setnumber][j.lk_added:]: + + if j.lk_added.setdefault(setnumber, 0) < len(j.lookaheads[setnumber]): + for a in j.lookaheads[setnumber][j.lk_added[setnumber]:]: # find b in FIRST(Xa) if j = [A->a.BX,a] temp_first_syms = first(jprodslice + (a,)) for x in temp_first_syms: if x not in first_syms: first_syms.append(x) - j.lk_added = len(j.lookaheads[setnumber]) + j.lk_added[setnumber] = len(j.lookaheads[setnumber]) for x in j.lrafter: @@ -1521,8 +1519,6 @@ def lr1_closure(I, setnumber = 0): if s not in _xlook: _xlook.append(s) didadd = 1 - else: - didadd = 0 else: x.lr_next.lookaheads[setnumber] = first_syms didadd = 1 @@ -1548,16 +1544,14 @@ def add_lookaheads(K): for item in J: if item.lr_index < len(item.prod)-1: for lookahead in item.lookaheads[setnumber]: + goto_setnumber = lr0_goto_setnumber(setnumber, item.prod[item.lr_index+1]) + next = None if lookahead != '#': - goto_setnumber = lr0_goto_setnumber(setnumber, item.prod[item.lr_index+1]) - next = None if item.lr_next in K[goto_setnumber]: next = item.lr_next if next: spontaneous.append((next, (lookahead, goto_setnumber))) else: - goto_setnumber = lr0_goto_setnumber(setnumber, item.prod[item.lr_index+1]) - next = None if goto_setnumber > -1: if item.lr_next in K[goto_setnumber]: next = item.lr_next @@ -2029,8 +2023,8 @@ def lalr_parse_table(): # This function writes the LR parsing tables to a file # ----------------------------------------------------------------------------- -def lr_write_tables(modulename=tab_module): - filename = modulename + ".py" +def lr_write_tables(modulename=tab_module,outputdir=''): + filename = os.path.join(outputdir,modulename) + ".py" try: f = open(filename,"w") @@ -2162,7 +2156,7 @@ def lr_read_tables(module=tab_module,optimize=0): # Build the parser module # ----------------------------------------------------------------------------- -def yacc(method=default_lr, debug=yaccdebug, module=None, tabmodule=tab_module, start=None, check_recursion=1, optimize=0,write_tables=1,debugfile=debug_file): +def yacc(method=default_lr, debug=yaccdebug, module=None, tabmodule=tab_module, start=None, check_recursion=1, optimize=0,write_tables=1,debugfile=debug_file,outputdir=''): global yaccdebug yaccdebug = debug @@ -2359,11 +2353,11 @@ def yacc(method=default_lr, debug=yaccdebug, module=None, tabmodule=tab_module, raise YaccError, "Unknown parsing method '%s'" % method if write_tables: - lr_write_tables(tabmodule) + lr_write_tables(tabmodule,outputdir) if yaccdebug: try: - f = open(debugfile,"w") + f = open(os.path.join(outputdir,debugfile),"w") f.write(_vfc.getvalue()) f.write("\n\n") f.write(_vf.getvalue()) |