MCPcopy Create free account
hub / github.com/NICUP14/MiniLang / tree_str

Function tree_str

src/GenStr.py:44–146  ·  view source on GitHub ↗
(node: Node, parent: Node = None, cnt: int = 0)

Source from the content-addressed store, hash-verified

42
43
44def tree_str(node: Node, parent: Node = None, cnt: int = 0):
45 left = None
46 right = None
47
48 if node is None:
49 return ''
50
51 if node.kind != NodeKind.FUN_CALL and node.left:
52 left = tree_str(node.left, node, cnt +
53 has_indent(node.left.kind) - (node.kind == NodeKind.END))
54 if node.kind != NodeKind.FUN_CALL and node.right:
55 right = tree_str(node.right, node, cnt +
56 has_indent(node.right.kind) - (node.kind == NodeKind.END))
57
58 indent = ' ' * cnt
59
60 if node.kind in (NodeKind.INT_LIT, NodeKind.CHAR_LIT):
61 return node.value
62 if node.kind in (NodeKind.TRUE_LIT, NodeKind.FALSE_LIT):
63 return color_str(Color.BLUE, node.value)
64 if node.kind == NodeKind.STR_LIT:
65 string = node.value.replace('\n', '\\n').replace(
66 '\t', '\\t').replace('\\end', 'end')
67 return string
68 if node.kind == NodeKind.IDENT:
69 return f'({color_str(Color.GREEN, rev_type_of_ident(node.value))})({node.value})'
70 if node.kind == NodeKind.OP_ADD:
71 return f'({left} + {right})'
72 if node.kind == NodeKind.OP_SUB:
73 return f'({left} - {right})'
74 if node.kind == NodeKind.OP_DIV:
75 return f'({left} / {right})'
76 if node.kind == NodeKind.OP_MOD:
77 return f'({left} % {right})'
78 if node.kind == NodeKind.OP_MULT:
79 return f'({left} * {right})'
80 if node.kind == NodeKind.OP_AND:
81 return f'({left} & {right})'
82 if node.kind == NodeKind.OP_OR:
83 return f'({left} | {right})'
84 if node.kind in (NodeKind.OP_ASSIGN, NodeKind.DECLARATION):
85 return f'({left} = {right})'
86 if node.kind == NodeKind.OP_GT:
87 return f'({left} > {right})'
88 if node.kind == NodeKind.OP_LT:
89 return f'({left} < {right})'
90 if node.kind == NodeKind.OP_EQ:
91 return f'({left} == {right})'
92 if node.kind == NodeKind.OP_LTE:
93 return f'({left} <= {right})'
94 if node.kind == NodeKind.OP_NEQ:
95 return f'({left} != {right})'
96 if node.kind == NodeKind.ARR_ACC:
97 return f'{left}[{right}]'
98 if node.kind == NodeKind.IF:
99 if right is not None:
100 return f'{color_str(Color.BLUE, "if")} {tree_str(node.middle)}\n {indent + left}\n{indent}{color_str(Color.BLUE, "else")}\n {indent + right}'
101 else:

Callers 3

print_errorFunction · 0.90
print_warningFunction · 0.90
fun_call_tree_strFunction · 0.85

Calls 6

color_strFunction · 0.90
rev_type_of_identFunction · 0.90
rev_type_ofFunction · 0.90
print_errorFunction · 0.90
has_indentFunction · 0.70
fun_call_tree_strFunction · 0.70

Tested by

no test coverage detected