AST.py revision 6999
12810Srdreslin@umich.edu# Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 211051Sandreas.hansson@arm.com# Copyright (c) 2009 The Hewlett-Packard Development Company 311051Sandreas.hansson@arm.com# All rights reserved. 411051Sandreas.hansson@arm.com# 511051Sandreas.hansson@arm.com# Redistribution and use in source and binary forms, with or without 611051Sandreas.hansson@arm.com# modification, are permitted provided that the following conditions are 711051Sandreas.hansson@arm.com# met: redistributions of source code must retain the above copyright 811051Sandreas.hansson@arm.com# notice, this list of conditions and the following disclaimer; 911051Sandreas.hansson@arm.com# redistributions in binary form must reproduce the above copyright 1011051Sandreas.hansson@arm.com# notice, this list of conditions and the following disclaimer in the 1111051Sandreas.hansson@arm.com# documentation and/or other materials provided with the distribution; 1211051Sandreas.hansson@arm.com# neither the name of the copyright holders nor the names of its 1311051Sandreas.hansson@arm.com# contributors may be used to endorse or promote products derived from 1411051Sandreas.hansson@arm.com# this software without specific prior written permission. 1511051Sandreas.hansson@arm.com# 162810Srdreslin@umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172810Srdreslin@umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182810Srdreslin@umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192810Srdreslin@umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202810Srdreslin@umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212810Srdreslin@umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222810Srdreslin@umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232810Srdreslin@umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242810Srdreslin@umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252810Srdreslin@umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262810Srdreslin@umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272810Srdreslin@umich.edu 282810Srdreslin@umich.edufrom slicc.util import PairContainer, Location 292810Srdreslin@umich.edu 302810Srdreslin@umich.educlass AST(PairContainer): 312810Srdreslin@umich.edu def __init__(self, slicc, pairs=None): 322810Srdreslin@umich.edu self.slicc = slicc 332810Srdreslin@umich.edu self.location = Location(slicc.current_file, slicc.lexer.lineno) 342810Srdreslin@umich.edu self.pairs = {} 352810Srdreslin@umich.edu if pairs: 362810Srdreslin@umich.edu self.pairs.update(getattr(pairs, "pairs", pairs)) 372810Srdreslin@umich.edu 382810Srdreslin@umich.edu @property 392810Srdreslin@umich.edu def symtab(self): 402810Srdreslin@umich.edu return self.slicc.symtab 412810Srdreslin@umich.edu 4211051Sandreas.hansson@arm.com @property 4311051Sandreas.hansson@arm.com def state_machine(self): 442810Srdreslin@umich.edu return self.slicc.symtab.state_machine 4511051Sandreas.hansson@arm.com 4611051Sandreas.hansson@arm.com def warning(self, message, *args): 472810Srdreslin@umich.edu self.location.warning(message, *args) 482810Srdreslin@umich.edu 492810Srdreslin@umich.edu def error(self, message, *args): 502810Srdreslin@umich.edu self.location.error(message, *args) 5111051Sandreas.hansson@arm.com 522810Srdreslin@umich.edu def embedError(self, message, *args): 532810Srdreslin@umich.edu if args: 5411051Sandreas.hansson@arm.com message = message % args 552810Srdreslin@umich.edu code = self.slicc.codeFormatter() 5611051Sandreas.hansson@arm.com code(''' 5711051Sandreas.hansson@arm.comcerr << "Runtime Error at ${{self.location}}, Ruby Time: " << g_eventQueue_ptr->getTime() << ": "<< $message << ", PID: " << getpid() << endl; 5811051Sandreas.hansson@arm.comchar c; cerr << "press return to continue." << endl; cin.get(c); abort(); 5911051Sandreas.hansson@arm.com''') 6011051Sandreas.hansson@arm.com 6111051Sandreas.hansson@arm.com return code 6211051Sandreas.hansson@arm.com