def __init__(self):
self.outputfile = open("output.py","w")
self.outputfile.write(preamble)
+ self.assign = []
def printpy(self,p):
self.outputfile.write(str(p)+"\n")
def assign(self,p):
def dedent(self,count):
return Leaf(token.DEDENT, '')
def nl(self):
- return Leaf(token.NEWLINE, '#\n')
+ return Leaf(token.NEWLINE, '\n')
def initPorts(self,params,ports):
- pass_stmt = Node(syms.pass_stmt ,[Leaf(token.NAME, "def __init__(self):")])
+ pass_stmt = Node(syms.pass_stmt ,[Leaf(token.NAME, "def __init__(self):#FIXME")])
if params:
params = [Leaf(token.LPAR, '(')] + params + [Leaf(token.RPAR, ')')]
fn = [Leaf(token.NAME, 'def'),
stmts.children.append(self.nl())
return stmts
-
+
+ def initFunc(self,ports,params):
+ params = [Leaf(token.LPAR, '('),Leaf(token.NAME,"self")] + [Leaf(token.RPAR, ')')]
+ # TODO handle sv params
+ fn = [Leaf(token.NAME, 'def'),
+ Leaf(token.NAME, '__init__', prefix=' '),
+ Node(syms.parameters, params),
+ Leaf(token.COLON, ':'),
+ self.nl()
+ ]
+ fndef = Node(syms.funcdef, fn)
+ stmts = Node(syms.stmt, [fndef])
+ for port in ports:
+ stmts.children.append(self.indent(2))
+ stmts.children.append(port)
+ stmts.children.append(self.nl())
+ return stmts
+
+ def elaborateFunc(self):
+ params = [Leaf(token.LPAR, '('),Leaf(token.NAME,"self, platform=None"),Leaf(token.RPAR, ')')]
+ fn = [Leaf(token.NAME, 'def'),
+ Leaf(token.NAME, 'elaborate', prefix=' '),
+ Node(syms.parameters, params),
+ Leaf(token.COLON, ':'),
+ self.nl()
+ ]
+ fndef = Node(syms.funcdef, fn)
+ stmts = Node(syms.stmt, [fndef])
+ stmts.children.append(self.indent(2))
+ stmts.children.append(Leaf(token.STRING,"m = Module()"))
+ stmts.children.append(self.nl())
+ ##
+ stmts.children.append(self.indent(2))
+ stmts.children.append(Leaf(token.STRING,"return m"))
+ stmts.children.append(self.nl())
+ return stmts
def module_1(self,p):
params = p[7]
Leaf(token.NAME, 'Elaboratable'),
Leaf(token.LPAR,')'),
Leaf(token.COLON, ':'),
+ self.nl(),
]
suite = Node(syms.suite, [Leaf(token.NEWLINE, '\n'),
self.indent(1),
- self.initPorts(params,ports),
- self.dedent(1)
+ self.initFunc(ports,params),
+ self.indent(1),
+ self.elaborateFunc()
+
])
clsdecl = Node(syms.classdef, clsname + [suite])
clsdecl = Node(syms.compound_stmt, [clsdecl])
- #.printpy("#clsdecl"+ repr(clsdecl))
- #absyn.printpy("#clsstr:")
+
self.printpy(str(clsdecl))
return clsdecl
+
+ # combinatorical assign
+ def cont_assign_1(self,p):
+ self.printpy("#ASSIGN"+str(list(p)))
+ self.assign += [p]