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 |
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() |