aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorTomas Kukosa <tomas.kukosa@siemens.com>2005-07-18 20:45:46 +0000
committerTomas Kukosa <tomas.kukosa@siemens.com>2005-07-18 20:45:46 +0000
commitaa6a15ebdeb0a6e086230fcef65018a197dbb827 (patch)
treef4840ac327543cad7becb7567528a94a25c506e1 /tools
parent1dd2e0e8f4428b5cd45227ddb34676d2c0d06327 (diff)
PLY package updated to version 1.6
svn path=/trunk/; revision=14951
Diffstat (limited to 'tools')
-rw-r--r--tools/asn2eth.py4
-rw-r--r--tools/lex.py13
-rw-r--r--tools/yacc.py36
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())