AST.py revision 8453
13536Sgblack@eecs.umich.edu# Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
23536Sgblack@eecs.umich.edu# Copyright (c) 2009 The Hewlett-Packard Development Company
33536Sgblack@eecs.umich.edu# All rights reserved.
43536Sgblack@eecs.umich.edu#
53536Sgblack@eecs.umich.edu# Redistribution and use in source and binary forms, with or without
63536Sgblack@eecs.umich.edu# modification, are permitted provided that the following conditions are
73536Sgblack@eecs.umich.edu# met: redistributions of source code must retain the above copyright
83536Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer;
93536Sgblack@eecs.umich.edu# redistributions in binary form must reproduce the above copyright
103536Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the
113536Sgblack@eecs.umich.edu# documentation and/or other materials provided with the distribution;
123536Sgblack@eecs.umich.edu# neither the name of the copyright holders nor the names of its
133536Sgblack@eecs.umich.edu# contributors may be used to endorse or promote products derived from
143536Sgblack@eecs.umich.edu# this software without specific prior written permission.
153536Sgblack@eecs.umich.edu#
163536Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
173536Sgblack@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
183536Sgblack@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
193536Sgblack@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
203536Sgblack@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
213536Sgblack@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
223536Sgblack@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
233536Sgblack@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
243536Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
253536Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
263536Sgblack@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
273536Sgblack@eecs.umich.edu
283536Sgblack@eecs.umich.edufrom slicc.util import PairContainer, Location
293536Sgblack@eecs.umich.edu
303536Sgblack@eecs.umich.educlass AST(PairContainer):
313536Sgblack@eecs.umich.edu    def __init__(self, slicc, pairs=None):
323536Sgblack@eecs.umich.edu        self.slicc = slicc
335543Ssaidi@eecs.umich.edu        self.location = slicc.currentLocation()
343536Sgblack@eecs.umich.edu        self.pairs = {}
353536Sgblack@eecs.umich.edu        if pairs:
363536Sgblack@eecs.umich.edu            self.pairs.update(getattr(pairs, "pairs", pairs))
373536Sgblack@eecs.umich.edu
383536Sgblack@eecs.umich.edu    @property
393536Sgblack@eecs.umich.edu    def symtab(self):
403536Sgblack@eecs.umich.edu        return self.slicc.symtab
415543Ssaidi@eecs.umich.edu
425543Ssaidi@eecs.umich.edu    @property
433536Sgblack@eecs.umich.edu    def state_machine(self):
443536Sgblack@eecs.umich.edu        return self.slicc.symtab.state_machine
453536Sgblack@eecs.umich.edu
463536Sgblack@eecs.umich.edu    def warning(self, message, *args):
473536Sgblack@eecs.umich.edu        self.location.warning(message, *args)
483536Sgblack@eecs.umich.edu
493536Sgblack@eecs.umich.edu    def error(self, message, *args):
503536Sgblack@eecs.umich.edu        self.location.error(message, *args)
513536Sgblack@eecs.umich.edu
523536Sgblack@eecs.umich.edu    def embedError(self, message, *args):
533536Sgblack@eecs.umich.edu        if args:
545543Ssaidi@eecs.umich.edu            message = message % args
555543Ssaidi@eecs.umich.edu        code = self.slicc.codeFormatter()
563536Sgblack@eecs.umich.edu        code('''
573536Sgblack@eecs.umich.educhar c;
583536Sgblack@eecs.umich.educerr << "Runtime Error at ${{self.location}}, Ruby Time: "
593536Sgblack@eecs.umich.edu     << g_eventQueue_ptr->getTime() << ": "
603536Sgblack@eecs.umich.edu     << $message
613536Sgblack@eecs.umich.edu     << ", PID: " << getpid() << endl
623536Sgblack@eecs.umich.edu     << "press return to continue." << endl;
633536Sgblack@eecs.umich.educin.get(c);
643536Sgblack@eecs.umich.eduabort();
653536Sgblack@eecs.umich.edu''')
663536Sgblack@eecs.umich.edu
673536Sgblack@eecs.umich.edu        return code
683536Sgblack@eecs.umich.edu