X-Git-Url: https://git.libre-soc.org/?p=sv2nmigen.git;a=blobdiff_plain;f=absyn.py;h=12f1c0a2a46265994e874508337dfded4671d882;hp=e1213573921bc97953feedeaaf9b02be81121d3a;hb=ef7e6ced2fbede9970934dfc86140ab241f1a32d;hpb=71d1f25d91fd5bfa2396591c0833dfa56f3f6f3a diff --git a/absyn.py b/absyn.py index e121357..12f1c0a 100644 --- a/absyn.py +++ b/absyn.py @@ -16,6 +16,7 @@ class Absyn: 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): @@ -32,10 +33,13 @@ class Absyn: def dedent(self,count): return Leaf(token.DEDENT, '') def nl(self): - return Leaf(token.NEWLINE, '#\n') + return Leaf(token.NEWLINE, '\n') + + def port_decl(self,comment, dt, name): + return None # TODO 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'), @@ -54,7 +58,47 @@ class Absyn: 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()) + ## + for a in self.assign: + stmts.children.append(self.indent(2)) + stmts.children.append(Leaf(token.STRING,"#FIXME_ASSIGN"+str(list(a[8])))) + 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] @@ -65,16 +109,23 @@ class Absyn: 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]