SymbolTable.py (6877:2a1a3d916ca8) SymbolTable.py (6999:f226c098c393)
1# Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
2# Copyright (c) 2009 The Hewlett-Packard Development Company
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions are
7# met: redistributions of source code must retain the above copyright
8# notice, this list of conditions and the following disclaimer;

--- 19 unchanged lines hidden (view full) ---

28from m5.util import code_formatter
29
30from slicc.generate import html
31from slicc.symbols.StateMachine import StateMachine
32from slicc.symbols.Type import Type
33from slicc.util import Location
34
35class SymbolTable(object):
1# Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
2# Copyright (c) 2009 The Hewlett-Packard Development Company
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions are
7# met: redistributions of source code must retain the above copyright
8# notice, this list of conditions and the following disclaimer;

--- 19 unchanged lines hidden (view full) ---

28from m5.util import code_formatter
29
30from slicc.generate import html
31from slicc.symbols.StateMachine import StateMachine
32from slicc.symbols.Type import Type
33from slicc.util import Location
34
35class SymbolTable(object):
36 def __init__(self):
36 def __init__(self, slicc):
37 self.slicc = slicc
38
37 self.sym_vec = []
38 self.sym_map_vec = [ {} ]
39 self.machine_components = {}
40
41 pairs = {}
42 pairs["enumeration"] = "yes"
43 MachineType = Type(self, "MachineType", Location("init", 0), pairs)
44 self.newSymbol(MachineType)
45
46 pairs = {}
47 pairs["primitive"] = "yes"
48 pairs["external"] = "yes"
49 void = Type(self, "void", Location("init", 0), pairs)
50 self.newSymbol(void)
51
52 def __repr__(self):
53 return "[SymbolTable]" # FIXME
54
39 self.sym_vec = []
40 self.sym_map_vec = [ {} ]
41 self.machine_components = {}
42
43 pairs = {}
44 pairs["enumeration"] = "yes"
45 MachineType = Type(self, "MachineType", Location("init", 0), pairs)
46 self.newSymbol(MachineType)
47
48 pairs = {}
49 pairs["primitive"] = "yes"
50 pairs["external"] = "yes"
51 void = Type(self, "void", Location("init", 0), pairs)
52 self.newSymbol(void)
53
54 def __repr__(self):
55 return "[SymbolTable]" # FIXME
56
57 def codeFormatter(self, *args, **kwargs):
58 return self.slicc.codeFormatter(*args, **kwargs)
59
55 def newSymbol(self, sym):
56 self.registerSym(str(sym), sym)
57 self.sym_vec.append(sym)
58
59 def registerSym(self, id, sym):
60 # Check for redeclaration (in the current frame only)
61 if id in self.sym_map_vec[-1]:
62 sym.error("Symbol '%s' redeclared in same scope.", id)

--- 50 unchanged lines hidden (view full) ---

113 self.sym_map_vec[0][ident] = symbol
114
115 def getAllType(self, type):
116 for symbol in self.sym_vec:
117 if isinstance(symbol, type):
118 yield symbol
119
120 def writeCodeFiles(self, path):
60 def newSymbol(self, sym):
61 self.registerSym(str(sym), sym)
62 self.sym_vec.append(sym)
63
64 def registerSym(self, id, sym):
65 # Check for redeclaration (in the current frame only)
66 if id in self.sym_map_vec[-1]:
67 sym.error("Symbol '%s' redeclared in same scope.", id)

--- 50 unchanged lines hidden (view full) ---

118 self.sym_map_vec[0][ident] = symbol
119
120 def getAllType(self, type):
121 for symbol in self.sym_vec:
122 if isinstance(symbol, type):
123 yield symbol
124
125 def writeCodeFiles(self, path):
121 code = code_formatter()
126 code = self.codeFormatter()
122 code('''
123/** Auto generated C++ code started by $__file__:$__line__ */
124
125#include "mem/ruby/slicc_interface/RubySlicc_includes.hh"
126''')
127 for symbol in self.sym_vec:
128 if isinstance(symbol, Type) and not symbol.isPrimitive:
129 code('#include "mem/protocol/${{symbol.c_ident}}.hh"')

--- 5 unchanged lines hidden (view full) ---

135
136 def writeHTMLFiles(self, path):
137 machines = list(self.getAllType(StateMachine))
138 if len(machines) > 1:
139 name = "%s_table.html" % machines[0].ident
140 else:
141 name = "empty.html"
142
127 code('''
128/** Auto generated C++ code started by $__file__:$__line__ */
129
130#include "mem/ruby/slicc_interface/RubySlicc_includes.hh"
131''')
132 for symbol in self.sym_vec:
133 if isinstance(symbol, Type) and not symbol.isPrimitive:
134 code('#include "mem/protocol/${{symbol.c_ident}}.hh"')

--- 5 unchanged lines hidden (view full) ---

140
141 def writeHTMLFiles(self, path):
142 machines = list(self.getAllType(StateMachine))
143 if len(machines) > 1:
144 name = "%s_table.html" % machines[0].ident
145 else:
146 name = "empty.html"
147
143 code = code_formatter()
148 code = self.codeFormatter()
144 code('''
145<html>
146<head>
147<title>$path</title>
148</head>
149<frameset rows="*,30">
150 <frame name="Table" src="$name">
151 <frame name="Status" src="empty.html">
152</frameset>
153</html>
154''')
155 code.write(path, "index.html")
156
149 code('''
150<html>
151<head>
152<title>$path</title>
153</head>
154<frameset rows="*,30">
155 <frame name="Table" src="$name">
156 <frame name="Status" src="empty.html">
157</frameset>
158</html>
159''')
160 code.write(path, "index.html")
161
157 code = code_formatter()
162 code = self.codeFormatter()
158 code("<HTML></HTML>")
159 code.write(path, "empty.html")
160
161 for symbol in self.sym_vec:
162 symbol.writeHTMLFiles(path)
163
164__all__ = [ "SymbolTable" ]
163 code("<HTML></HTML>")
164 code.write(path, "empty.html")
165
166 for symbol in self.sym_vec:
167 symbol.writeHTMLFiles(path)
168
169__all__ = [ "SymbolTable" ]