e1213573921bc97953feedeaaf9b02be81121d3a
1 from lib2to3
.pytree
import Node
, Leaf
2 from lib2to3
.pgen2
import token
3 from lib2to3
.pygram
import python_symbols
as syms
5 preamble
= """# this file has been generated by sv2nmigen
7 from nmigen import Signal, Module, Const, Cat, Elaboratable
17 self
.outputfile
= open("output.py","w")
18 self
.outputfile
.write(preamble
)
20 self
.outputfile
.write(str(p
)+"\n")
25 # m.d.comb += [l.eq(r)]
26 def indent(self
,count
):
28 return Leaf(token
.INDENT
, '>>> '*count
)
30 return Leaf(token
.INDENT
, ' '*4*count
)
32 def dedent(self
,count
):
33 return Leaf(token
.DEDENT
, '')
35 return Leaf(token
.NEWLINE
, '#\n')
37 def initPorts(self
,params
,ports
):
38 pass_stmt
= Node(syms
.pass_stmt
,[Leaf(token
.NAME
, "def __init__(self):")])
40 params
= [Leaf(token
.LPAR
, '(')] + params
+ [Leaf(token
.RPAR
, ')')]
41 fn
= [Leaf(token
.NAME
, 'def'),
42 Leaf(token
.NAME
, '__initXXX__', prefix
=' '),
43 Node(syms
.parameters
, params
),
44 Leaf(token
.COLON
, ':')]
45 fndef
= Node(syms
.funcdef
, fn
)
46 stmts
= Node(syms
.stmt
, [fndef
])
48 stmts
= Node(syms
.small_stmt
, [pass_stmt
, Leaf(token
.NEWLINE
, '\n')])
49 stmts
= Node(syms
.stmt
, [stmts
])
52 stmts
.children
.append(self
.indent(2))
53 stmts
.children
.append(port
)
54 stmts
.children
.append(self
.nl())
62 clsname
= [Leaf(token
.NAME
, 'class'),
63 Leaf(token
.NAME
, p
[4], prefix
=' '),
65 Leaf(token
.NAME
, 'Elaboratable'),
67 Leaf(token
.COLON
, ':'),
70 suite
= Node(syms
.suite
, [Leaf(token
.NEWLINE
, '\n'),
72 self
.initPorts(params
,ports
),
75 clsdecl
= Node(syms
.classdef
, clsname
+ [suite
])
76 clsdecl
= Node(syms
.compound_stmt
, [clsdecl
])
77 #.printpy("#clsdecl"+ repr(clsdecl))
78 #absyn.printpy("#clsstr:")
79 self
.printpy(str(clsdecl
))