start parsing all source files, output python
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Thu, 2 Apr 2020 16:30:39 +0000 (17:30 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Thu, 2 Apr 2020 16:30:39 +0000 (17:30 +0100)
libreriscv
src/soc/decoder/power_pseudo.py
src/soc/decoder/pseudo/lexer.py
src/soc/decoder/pseudo/pagereader.py
src/soc/decoder/pseudo/parser.py

index 03177977f70255421290a59caa3db84658e7f3e5..620efa218f922eba23b19189109bec785a624a82 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 03177977f70255421290a59caa3db84658e7f3e5
+Subproject commit 620efa218f922eba23b19189109bec785a624a82
index 104edd9866b20b25e3bb2877739c7269f5789f25..76e50906311c9d1271f506a4a44d1dbf016080b8 100644 (file)
@@ -13,6 +13,7 @@ from pprint import pprint
 from copy import copy
 from ply import lex, yacc
 import astor
+import ast
 
 from soc.decoder.power_decoder import create_pdecode
 from nmigen.back.pysim import Simulator, Delay
@@ -102,6 +103,15 @@ class GPR(dict):
         return self.regfile[rnum]
 
 
+def convert_to_python(pcode):
+
+    gsc = GardenSnakeCompiler()
+
+    tree = gsc.compile(pcode, mode="exec", filename="string")
+    tree = ast.fix_missing_locations(tree)
+    return astor.to_source(tree)
+
+
 def test():
 
     gsc = GardenSnakeCompiler()
@@ -115,7 +125,6 @@ def test():
     _compile = gsc.compile
 
     tree = _compile(code, mode="single", filename="string")
-    import ast
     tree = ast.fix_missing_locations(tree)
     print ( ast.dump(tree) )
 
index 9076672d58f8fa6c90eec40a25d13b1d591d9330..ba517c4fd67390605bce7c8718f8205645b184e2 100644 (file)
@@ -133,7 +133,7 @@ def indentation_filter(tokens):
     depth = 0
     prev_was_ws = False
     for token in tokens:
-        if 1:
+        if 0:
             print ("Process", depth, token.indent, token,)
             if token.at_line_start:
                 print ("at_line_start",)
@@ -367,6 +367,7 @@ class PowerLexer:
         print ("Skipping", repr(t.value[0]))
         t.lexer.skip(1)
 
+
 # Combine Ply and my filters into a new lexer
 
 class IndentLexer(PowerLexer):
@@ -374,6 +375,7 @@ class IndentLexer(PowerLexer):
         self.build(debug=debug, optimize=optimize,
                                 lextab=lextab, reflags=reflags)
         self.token_stream = None
+
     def input(self, s, add_endmarker=True):
         self.lexer.paren_count = 0
         self.lexer.brack_count = 0
index 61b7838ff45c846907014792e921f4c6fae04e23..aa0557bc5f4cd3d00f9b529a6d88f9d9912fe536 100644 (file)
@@ -66,6 +66,7 @@ class ISA:
     def __init__(self):
         self.instr = OrderedDict()
         self.forms = {}
+        self.page = {}
         for pth in os.listdir(os.path.join(get_isa_dir())):
             print (get_isa_dir(), pth)
             assert pth.endswith(".mdwn"), "only %s in isa dir" % pth
@@ -161,6 +162,11 @@ class ISA:
         fl = self.forms.get(form, [])
         self.forms[form] = fl + [opcode]
 
+        # create list of instructions by page
+        page = op['page']
+        pl = self.page.get(page, [])
+        self.page[page] = pl + [opcode]
+
     def pprint_ops(self):
         for k, v in self.instr.items():
             print ("# %s %s" % (v.opcode, v.desc))
index 69fe6aa958491483473bf75985e1e4dbff3aab8f..8f76f32758d3ec9386ae44b36eededba87bb1622 100644 (file)
@@ -470,7 +470,7 @@ class GardenSnakeParser(PowerParser):
     def __init__(self, lexer = None):
         PowerParser.__init__(self)
         if lexer is None:
-            lexer = IndentLexer(debug=1)
+            lexer = IndentLexer(debug=0)
         self.lexer = lexer
         self.tokens = lexer.tokens
         self.parser = yacc.yacc(module=self, start="file_input_end",
@@ -479,8 +479,8 @@ class GardenSnakeParser(PowerParser):
         self.sd = create_pdecode()
 
     def parse(self, code):
-        self.lexer.input(code)
-        result = self.parser.parse(lexer = self.lexer, debug=False)
+        #self.lexer.input(code)
+        result = self.parser.parse(code, lexer=self.lexer, debug=False)
         return ast.Module(result)
 
 
@@ -491,6 +491,7 @@ class GardenSnakeParser(PowerParser):
 class GardenSnakeCompiler(object):
     def __init__(self):
         self.parser = GardenSnakeParser()
+
     def compile(self, code, mode="exec", filename="<string>"):
         tree = self.parser.parse(code)
         print ("snake")