From 2501a8edb8bc25a1fd6a20be86bc48f0ddef8a07 Mon Sep 17 00:00:00 2001 From: Tobias Platen Date: Sat, 26 Oct 2019 17:29:13 +0200 Subject: [PATCH] add elaborate function --- absyn.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++------- parse_sv.py | 3 ++- 2 files changed, 52 insertions(+), 8 deletions(-) diff --git a/absyn.py b/absyn.py index e121357..a1b3427 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,10 @@ class Absyn: 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'), @@ -54,7 +55,42 @@ 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()) + ## + 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 +101,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] diff --git a/parse_sv.py b/parse_sv.py index 627aa03..3df4571 100644 --- a/parse_sv.py +++ b/parse_sv.py @@ -5019,7 +5019,8 @@ def p_lpvalue_4(p): () def p_cont_assign_1(p): '''cont_assign : lpvalue '=' expression ''' - if(parse_debug): print('cont_assign_1 TODO', list(p)) + if(parse_debug): print('cont_assign_1', list(p)) + absyn.cont_assign_1(p) # { list*tmp = new list; # tmp->push_back(p[1]); # tmp->push_back(p[3]); -- 2.30.2