diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/python/ppci/layout.py	Sun Apr 27 12:24:21 2014 +0200
@@ -0,0 +1,58 @@
+
+class Layout:
+    def __init__(self):
+        self.mems = []
+
+    def __eq__(self, other):
+        return self.mems == other.mems
+
+
+class Memory:
+    def __init__(self, address=0x0):
+        self.inputs = []
+        self.address = address
+        self.size = 0x0
+
+    def add_input(self, inp):
+        assert isinstance(inp, Input)
+        self.inputs.append(inp)
+
+
+class Input:
+    pass
+
+
+class SectionInput(Input):
+    def __init__(self, section_name):
+        self.section_name = section_name
+
+
+def load_layout(f):
+    return deserialize(json.load(f))
+
+
+def make_int(txt):
+    if txt.startswith('0x'):
+        return int(txt[2:], 16)
+    else:
+        return int(txt)
+
+
+class LayoutParser:
+    def __init__(self):
+        toks = ['ID', '{', '}', 'MEMORY', 'ALIGN', '.', pyyacc.EPS, pyyacc.EOF]
+        g = pyyacc.Grammar(toks)
+        g.add_production('layout', ['MEMORY', '{', 'input_list', '}'])
+        g.add_production('input_list', ['MEMORY', '{', 'input_list', '}'])
+
+
+def deserialize(d):
+    layout = Layout()
+    for mem_node in d['memories']:
+        m = Memory()
+        m.address = make_int(mem_node['address'])
+        m.size = make_int(mem_node['size'])
+        for input_node in mem_node['inputs']:
+            pass
+    return layout
+