def _evaluate_entity(entity, functions): if entity.name == "INTEGRAL_NUMBER": return int(entity.value) elif entity.name == "REAL_NUMBER": return float(entity.value) elif entity.name == "CHARACTER": return ord(string_utilities.unquote(entity.value)) elif entity.name == "STRING": return string_utilities.make_list_from_string(string_utilities.unquote(entity.value)) elif entity.name == "IDENTIFIER": return trampoline.closure_trampoline(functions[entity.value]) elif entity.name == "function": return _evaluate_function(entity, functions) elif entity.name == "call": return _evaluate_call(entity, functions)
def _evaluate_call(call, functions): inner_function = _evaluate_entity(call.children[0].children[0].children[0], functions) parameters = [_evaluate_entity(parameter, functions) for parameter in call.children[1].children] return trampoline.closure_trampoline(inner_function(*parameters))