def METHOD_NAME(self, node: ASTExpressionNode) -> str:
    assert isinstance(node, ASTExpression)
    if node.is_unary_operator():
        return self._print_unary_op_expression(node)
    if node.is_encapsulated:
        return self._print_encapsulated_expression(node)
    if node.is_logical_not:
        return self.print_logical_not(node)
    if node.is_compound_expression():
        return self._print_binary_op_expression(node)
    if node.is_ternary_operator():
        return self._print_ternary_operator_expression(node)
    if node.is_expression():
        return self.METHOD_NAME(node.get_expression())
    raise RuntimeError("Tried to print unknown expression: \"%s\"" % str(node))