-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathassemble.py
More file actions
51 lines (35 loc) · 1.22 KB
/
assemble.py
File metadata and controls
51 lines (35 loc) · 1.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import sutil
import asmlexer
import asmparser
def assemble_code(code: str) -> list: # returns a "list" of protos
source: asmlexer.SourceCode = asmlexer.SourceCode()
lexer: asmlexer.AsmLexer = asmlexer.AsmLexer()
collapser: asmlexer.AsmLexCollapser = asmlexer.AsmLexCollapser()
parser: asmparser.AsmParser = asmparser.AsmParser()
source.set_source(code)
lexer.set_source(source)
collapser.set_source(source)
parser.set_source(source)
lexer.simple_lex()
collapser.set_tokens(lexer.output)
collapser.collapse_lex()
parser.set_tokens(collapser.output)
parser.parse_protos()
return parser.protos
def finish_write(output, funcs: list):
pass # TODO: Pass through list and write to binary
def process_query(output, args):
timer: sutil.LightTimer = sutil.LightTimer()
funcs: list = [] # pile up funcs for final assembling
for name in args.files:
with open(name, 'r', encoding=sutil.ASCII_ISO) as file:
asm: str = file.read()
timer.restart()
funcs.append(assemble_code(asm))
if args.verbose:
off: str = timer.pretty()
pad: str = len(file.name) * ' '
sz: str = sutil.sizeof_fmt(len(asm), 'B')
dbgp = f'{file.name}: size {sz}\n{pad}: time {off}'
print(dbgp)
finish_write(output, funcs)