add working preprocessor (creates docstrings)
[sv2nmigen.git] / parse_sv.py
index 627aa03121bdb1e073abe7debafe6429b4706820..02f315dc88117633b8b14d8c4865ccbff999e9a5 100644 (file)
@@ -23,8 +23,8 @@ from lib2to3.pytree import Node, Leaf
 from lib2to3.pgen2 import token
 from lib2to3.pygram import python_symbols as syms
 
-yacc1_debug = 0
-yacc2_debug = 0
+yacc1_debug = 1
+yacc2_debug = 1
 parse_debug = 1
 
 from ply import yacc, lex
@@ -109,18 +109,6 @@ class DataType:
         self.typ = typ
         self.signed = signed
 
-def port_decl(comment, dt, name):
-    if dt is None or dt.dims is None:
-        width = '' # width: 1
-    else:
-        width = dt.dims
-        # XXX TODO, better checking, should be using data structure... *sigh*
-        width = width[1:-1] # strip brackets
-        width = width.split(':')
-        assert width[0] == '0'
-        width = width[1]
-    return 'self.%s = Signal(%s) # %s' % (name, width, comment)
-
 # -------------- RULES ----------------
 ()
 def p_source_text_1(p):
@@ -4758,9 +4746,8 @@ def p_list_of_port_declarations_5(p):
 def p_port_declaration_1(p):
     '''port_declaration : attribute_list_opt K_input net_type_opt data_type_or_implicit IDENTIFIER dimensions_opt '''
     if(parse_debug): print('port_declaration_1 FIXME', list(p))
-    # XXX TODO: python AST
     comment, dt, name = p[2], p[4], p[5]
-    p[0] = port_decl(comment, dt, name)
+    p[0] = absyn.port_decl(comment, dt, name)
     # { Module::port_t*ptmp;
     #  perm_string name = lex_strings.make(p[5]);
     #  data_type_t*use_type = p[4];
@@ -4831,9 +4818,8 @@ def p_port_declaration_4(p):
 def p_port_declaration_5(p):
     '''port_declaration : attribute_list_opt K_output net_type_opt data_type_or_implicit IDENTIFIER dimensions_opt '''
     if(parse_debug): print('port_declaration_5 FIXME', list(p))
-    # XXX TODO: python AST
     comment, dt, name = p[2], p[4], p[5]
-    p[0] = port_decl(comment, dt, name)
+    p[0] = absyn.port_decl(comment, dt, name)
     # { Module::port_t*ptmp;
     #  perm_string name = lex_strings.make(p[5]);
     #  data_type_t*use_dtype = p[4];
@@ -5019,7 +5005,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<PExpr*>*tmp = new list<PExpr*>;
     #  tmp->push_back(p[1]);
     #  tmp->push_back(p[3]);