comparison python/ppci/layout.py @ 382:0c44e494ef58

Made lexer more generic
author Windel Bouwman
date Sun, 27 Apr 2014 12:24:21 +0200
parents
children 173e20a47fda
comparison
equal deleted inserted replaced
381:6df89163e114 382:0c44e494ef58
1
2 class Layout:
3 def __init__(self):
4 self.mems = []
5
6 def __eq__(self, other):
7 return self.mems == other.mems
8
9
10 class Memory:
11 def __init__(self, address=0x0):
12 self.inputs = []
13 self.address = address
14 self.size = 0x0
15
16 def add_input(self, inp):
17 assert isinstance(inp, Input)
18 self.inputs.append(inp)
19
20
21 class Input:
22 pass
23
24
25 class SectionInput(Input):
26 def __init__(self, section_name):
27 self.section_name = section_name
28
29
30 def load_layout(f):
31 return deserialize(json.load(f))
32
33
34 def make_int(txt):
35 if txt.startswith('0x'):
36 return int(txt[2:], 16)
37 else:
38 return int(txt)
39
40
41 class LayoutParser:
42 def __init__(self):
43 toks = ['ID', '{', '}', 'MEMORY', 'ALIGN', '.', pyyacc.EPS, pyyacc.EOF]
44 g = pyyacc.Grammar(toks)
45 g.add_production('layout', ['MEMORY', '{', 'input_list', '}'])
46 g.add_production('input_list', ['MEMORY', '{', 'input_list', '}'])
47
48
49 def deserialize(d):
50 layout = Layout()
51 for mem_node in d['memories']:
52 m = Memory()
53 m.address = make_int(mem_node['address'])
54 m.size = make_int(mem_node['size'])
55 for input_node in mem_node['inputs']:
56 pass
57 return layout
58