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