PLY package updated to version 1.6
svn path=/trunk/; revision=14951
This commit is contained in:
parent
1dd2e0e8f4
commit
aa6a15ebde
|
@ -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),
|
||||
|
|
13
tools/lex.py
13
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
|
||||
|
|
|
@ -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())
|
||||
|
|
Loading…
Reference in New Issue