Compiler/AST interpreter: Difference between revisions

Content added Content deleted
m (Fix embedded // in string handling)
m (Fix embedded // in string handling)
Line 560: Line 560:


elif x.node_type == nd_Prts:
elif x.node_type == nd_Prts:
print(interp(x.left).replace("\\n", "\n"), end='')
print(interp(x.left), end='')
return None
return None


Line 569: Line 569:
else:
else:
error("error in code generator - found %d, expecting operator" % (x.node_type))
error("error in code generator - found %d, expecting operator" % (x.node_type))

def str_trans(srce):
dest = ""
i = 0
srce = srce[1:-1]
while i < len(srce):
if srce[i] == '\\' and i + 1 < len(srce):
if srce[i + 1] == 'n':
dest += '\n'
i += 2
elif srce[i + 1] == '\\':
dest += '\\'
i += 2
else:
dest += srce[i]
i += 1

return dest


def load_ast():
def load_ast():
line = input_file.readline()
line = input_file.readline()
line_list = shlex.split(line)
line_list = shlex.split(line, False, False)


text = line_list[0]
text = line_list[0]
Line 586: Line 604:
node_type = all_syms[text]
node_type = all_syms[text]
if value != None:
if value != None:
if node_type == nd_String:
value = str_trans(value)

return make_leaf(node_type, value)
return make_leaf(node_type, value)
left = load_ast()
left = load_ast()