convert numbers to python format
[sv2nmigen.git] / parse_sv.py
index 427f399e7a287b54f99d5173f35e56038fa4eac3..9ca18f6f5a6ea834d2372b18d7f4decd2216f5b8 100644 (file)
@@ -27,7 +27,7 @@ from lib2to3.pygram import python_symbols as syms
 
 yacc1_debug = 0
 yacc2_debug = 0
-parse_debug = 0
+parse_debug = 1
 
 
 #from parse_tokens import tokens
@@ -116,13 +116,6 @@ class StatementList:
         self.statements += [s]
 
 
-class PAssign:
-    def __init__(self, l, op, r):
-        self.l = l
-        self.op = op
-        self.r = r
-
-
 # -------------- RULES ----------------
 ()
 
@@ -2357,6 +2350,11 @@ def p_number_1(p):
     if(parse_debug):
         print('number_1', list(p))
 
+    p[1] = p[1].replace("'b", "0b")
+    p[1] = p[1].replace("'x", "0x")
+    num = Leaf(token.NUMBER, "%s" % (p[1]))
+    p[0] = num
+
 
     # { p[0] = p[1]; based_size = 0;}
 ()
@@ -2366,6 +2364,8 @@ def p_number_2(p):
     '''number : DEC_NUMBER '''
     if(parse_debug):
         print('number_2', list(p))
+    p[1] = p[1].replace("'b", "0b")
+    p[1] = p[1].replace("'x", "0x")
     num = Leaf(token.NUMBER, "%s" % (p[1]))
     p[0] = num
 
@@ -2378,7 +2378,11 @@ def p_number_3(p):
     '''number : DEC_NUMBER BASED_NUMBER '''
     if(parse_debug):
         print('number_3', list(p))
-    num = Leaf(token.NUMBER, "%s:%s" % (p[1], p[2]))
+
+    p[2] = p[2].replace("'b", "0b")
+    p[2] = p[2].replace("'x", "0x")
+
+    num = Leaf(token.NUMBER, "%s" % (p[2]))
     p[0] = num
 
 
@@ -6244,8 +6248,11 @@ def p_expression_46(p):
     if(parse_debug):
         print('expression_46', list(p))
 
-    p[0] = Node(syms.atom, [p[1], Leaf(token.STRING, ' ? '),
-                            p[4], Leaf(token.STRING, ' : '), p[6]])
+    try:
+        p[0] = Node(syms.atom, [p[1], Leaf(token.STRING, ' ? '),
+                                p[4], Leaf(token.STRING, ' : '), p[6]])
+    except:
+        p[0] = "error in PETernary"
 
 
     # { PETernary*tmp = new PETernary(p[1], p[4], p[6]);
@@ -7655,6 +7662,9 @@ def p_hierarchy_identifier_3(p):
     if(parse_debug):
         print('hierarchy_identifier_3', list(p))
 
+        p[0] = Node(syms.atom, [p[1], Leaf(
+            token.STRING, '['), p[3], Leaf(token.STRING, ']')])
+
 
     # { pform_name_t * tmp = p[1];
     #    name_component_t&tail = tmp->back();
@@ -9155,6 +9165,8 @@ def p_module_item_40(p):
     if(parse_debug):
         print('module_item_40', list(p))
 
+    absyn.always_ff(p[3], p[1])
+
 
     # { PProcess*tmp = pform_make_behavior(IVL_PR_ALWAYS_FF, p[3], p[1]);
     #  FILE_NAME(tmp, @2);
@@ -11869,6 +11881,8 @@ def p_statement_item_1(p):
     #          }
 ()
 
+# TODO: read all statement items
+
 
 def p_statement_item_2(p):
     '''statement_item : K_deassign lpvalue ';' '''
@@ -11927,6 +11941,14 @@ def p_statement_item_6(p):
     if(parse_debug):
         print('statement_item_6', list(p))
 
+        tmp = None
+        if(p[3]):
+            throw(Exception("assert(! current_block_stack.empty());"))
+        else:
+            tmp = p[5]
+
+        p[0] = tmp
+
 
     # { PBlock*tmp;
     #  if (p[3]) {
@@ -12187,6 +12209,8 @@ def p_statement_item_23(p):
     if(parse_debug):
         print('statement_item_23', list(p))
 
+    p[0] = absyn.cond_statement3(p[3], p[5], None)
+
 
     # { PCondit*tmp = new PCondit(p[3], p[5], 0);
     #            FILE_NAME(tmp, @1);
@@ -12200,6 +12224,7 @@ def p_statement_item_24(p):
     if(parse_debug):
         print('statement_item_24', list(p))
 
+        p[0] = absyn.cond_statement3(p[3], p[5], p[7])
 
     # { PCondit*tmp = new PCondit(p[3], p[5], p[7]);
     #            FILE_NAME(tmp, @1);
@@ -12273,6 +12298,8 @@ def p_statement_item_30(p):
     if(parse_debug):
         print('statement_item_30', list(p))
 
+    p[0] = [p[1], p[2]]
+
 
     # { PEventStatement*tmp = p[1];
     #  if (tmp == 0) {
@@ -12359,6 +12386,8 @@ def p_statement_item_35(p):
     if(parse_debug):
         print('statement_item_35', list(p))
 
+    p[0] = absyn.assign3(p[1], p[2], p[3])
+
 
     # { PAssignNB*tmp = new PAssignNB(p[1],p[3]);
     #  FILE_NAME(tmp, @1);