5 from openpower
.decoder
.power_enums
import (
9 import openpower
.oppc
.pc_code
as pc_code
10 import openpower
.oppc
.pc_lexer
as pc_lexer
11 import openpower
.oppc
.pc_parser
as pc_parser
12 import openpower
.oppc
.pc_pseudocode
as pc_pseudocode
16 if line
.startswith(" "):
17 return line
[4:].rstrip()
21 def parse(parser
, origin
):
22 origin
= tuple(origin
)
23 tree
= parser
.parse(code
="\n".join(origin
))
24 stream
= io
.StringIO()
25 for (level
, line
) in pc_pseudocode
.pseudocode(tree
):
26 print(f
"{' ' * 4 * level}{line}", file=stream
)
28 target
= tuple(stream
)
29 return (origin
, target
)
32 lexer
= pc_lexer
.IndentLexer(debug
=False)
33 parser
= pc_parser
.Parser(lexer
=lexer
)
34 pattern
= re
.compile(r
"Pseudo-code:(.*?)(?:Special Registers Altered|Description):", re
.DOTALL
)
35 for path
in []: # glob.glob(f"{find_wiki_dir()}/../isa/*.mdwn"):
36 with
open(path
, "r", encoding
="UTF-8") as stream
:
38 for origin
in pattern
.findall(data
):
40 (stage0
, stage1
) = parse(parser
, map(dedent
, origin
.split("\n")))
41 (stage2
, stage3
) = parse(parser
, map(dedent
, stage1
))
42 stage1
= tuple(map(dedent
, stage1
))
43 stage3
= tuple(map(dedent
, stage3
))
44 assert stage1
== stage2
and stage2
== stage3
45 except AssertionError as exc
:
50 except Exception as exc
:
58 tree
= parser
.parse(code
=code
)
60 for (level
, line
) in pc_pseudocode
.pseudocode(tree
):
61 print(f
"{' ' * 4 * level}{line}")
63 for (level
, line
) in pc_code
.code(name
="cdtbcd", root
=tree
):
64 print(f
"{' ' * 4 * level}{line}")