#  Copyright (c) 1998-2000 John Aycock
#  
#  Permission is hereby granted, free of charge, to any person obtaining
#  a copy of this software and associated documentation files (the
#  "Software"), to deal in the Software without restriction, including
#  without limitation the rights to use, copy, modify, merge, publish,
#  distribute, sublicense, and/or sell copies of the Software, and to
#  permit persons to whom the Software is furnished to do so, subject to
#  the following conditions:
#  
#  The above copyright notice and this permission notice shall be
#  included in all copies or substantial portions of the Software.
#  
#  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
#  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
#  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
#  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
#  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
#  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
#  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

#
#  Minimal AST class.  My usual ones are actually N-ary trees -- that's
#  why "left" and "right" are munged into self._kids.  Unfortunately,
#  to keep the paper readable, I needed to mangle the container classes
#  a bit :-(
#

class AST:
	def __init__(self, type, left=None, right=None):
		self.type = type.type
		self.attr = type.attr
		self._kids = []
		self.left = left
		self.right = right
		if left: self._kids.append(left)
		if right: self._kids.append(right)

	def __getitem__(self, i):
		return self._kids[i]

#
#  ASTTraversal is a deprecated interface to GenericASTTraversal.
#

import spark
ASTTraversal = spark.GenericASTTraversal
