restructure so preprocesser expansion is a chainable state-modifier

master
cynic 3 years ago
parent 1bddcf8fd3
commit 07ec7e31bf
  1. 79
      main.py

@ -6,47 +6,46 @@ def isnum(n):
except: except:
return False return False
return True return True
reps = ["(", ")", "\"", ","]
f = open(sys.argv[1]).read()
def expand(file, path): def preprocess(filename):
working_directory = pathlib.Path(path).parent.resolve() def expand(file, path):
tmp = file.replace("\\\n", "").split("\n") working_directory = pathlib.Path(path).parent.resolve()
defs = {} tmp = file.replace("\\\n", "").split("\n")
for idx, i in enumerate(tmp): defs = {}
parts = i.split(":") for idx, i in enumerate(tmp):
if len(i) < 1:
continue
elif i[:8] == "INCLUDE:":
fpath = str(working_directory)+"/"+i[8:]
tdefs, tmp[idx] = expand(open(fpath).read(), fpath)
defs.update(tdefs)
elif i[:7] == "DEFINE:":
parts = parts[1:]
defs[parts[0]] = (parts[2:], parts[1].replace("\t", " "))
tmp.pop(idx)
elif i[0] == ":":
tmp.pop(idx)
elif i.split(":")[0] in defs.keys():
parts = i.split(":") parts = i.split(":")
args, exp = defs[parts[0]] if len(i) < 1:
continue
for arg_idx, arg in enumerate(parts[1:]): elif i[:8] == "INCLUDE:":
if len(args) < 1: break fpath = str(working_directory)+"/"+i[8:]
exp = exp.replace( tdefs, tmp[idx] = expand(open(fpath).read(), fpath)
args[arg_idx], arg defs.update(tdefs)
) elif i[:7] == "DEFINE:":
#print(exp, "exp") parts = parts[1:]
tmp[idx] = exp defs[parts[0]] = (parts[2:], parts[1].replace("\t", " "))
#print(i, "\nsep") tmp.pop(idx)
return (defs, "\n".join(tmp)) elif i[0] == ":":
tmp.pop(idx)
f = expand(f, sys.argv[1])[1] elif i.split(":")[0] in defs.keys():
parts = i.split(":")
args, exp = defs[parts[0]]
f = f.replace(" ", " RDANEELOLIVAW ") # spacer
for r in reps: f = f.replace(r, " "+r+" ") for arg_idx, arg in enumerate(parts[1:]):
f = f.split() if len(args) < 1: break
exp = exp.replace(
args[arg_idx], arg
)
#print(exp, "exp")
tmp[idx] = exp
#print(i, "\nsep")
return (defs, "\n".join(tmp))
f = open(filename).read()
f = expand(f, sys.argv[1])[1]
f = f.replace(" ", " RDANEELOLIVAW ") # spacer
for r in ["(", ")", "\"", ","]: f = f.replace(r, " "+r+" ")
return f.split()
def tokenize(f): def tokenize(f):
toks = [] toks = []
@ -125,7 +124,7 @@ def structurize(program):
#print(tokenize(f)) #print(tokenize(f))
#print(lex(tokenize(f)), "\n") #print(lex(tokenize(f)), "\n")
program = structurize(lex(tokenize(f))) program = structurize(lex(tokenize(preprocess(sys.argv[1]))))
#lib.execute(structurize(lex(tokenize(f)))) #lib.execute(structurize(lex(tokenize(f))))
#print(program) #print(program)

Loading…
Cancel
Save