Open Di-az opened 1 year ago
Aquí te dejo, Este intérprete de Python utiliza el módulo ast para analizar el código fuente de Python y luego recorre el árbol sintáctico generado para interpretar y ejecutar el código. Ten en cuenta que este es solo un ejemplo simple y no admite todas las características y construcciones de Python. Puedes agregar más funciones y características según tus necesidades.
Recuerda que este intérprete utiliza la última versión de Python instalada en tu sistema, ya que no implementa su propio intérprete o compilador.
Un ejemplo de código bien estructurado para un intérprete de Python:
import ast
import builtins
class PythonInterpreter(ast.NodeVisitor):
def __init__(self):
self.globals = {}
self.locals = {}
def visit_Module(self, node):
for stmt in node.body:
self.visit(stmt)
def visit_Expr(self, node):
value = self.visit(node.value)
if value is not None:
print(value)
def visit_Num(self, node):
return node.n
def visit_Str(self, node):
return node.s
def visit_Name(self, node):
if node.id in self.locals:
return self.locals[node.id]
elif node.id in self.globals:
return self.globals[node.id]
elif node.id in dir(builtins):
return getattr(builtins, node.id)
else:
raise NameError(f"Name '{node.id}' is not defined")
def visit_Assign(self, node):
target = node.targets[0].id
value = self.visit(node.value)
self.locals[target] = value
def visit_BinOp(self, node):
left = self.visit(node.left)
right = self.visit(node.right)
op = node.op
if isinstance(op, ast.Add):
return left + right
elif isinstance(op, ast.Sub):
return left - right
elif isinstance(op, ast.Mult):
return left * right
elif isinstance(op, ast.Div):
return left / right
elif isinstance(op, ast.Mod):
return left % right
else:
raise TypeError(f"Unsupported operator: {op}")
def interpret(code):
tree = ast.parse(code)
interpreter = PythonInterpreter()
interpreter.visit(tree)
# Ejemplo de uso
codigo_ejemplo = '''
x = 5
y = 3
resultado = x + y
resultado
'''
interpret(codigo_ejemplo)
____________________________________________________
User story: Contar con un compilador de código integrado en la plataforma#5