def clickButton(self, value, text): # Get the equation that's entered by the user current_equation = str(self.equation.get()) text = current_equation # If user clicked "CLEAR", then clear the screen if value == 'CLEAR': text = "" self.equation.delete(-1, END) # If user clicked "VALUE", then compute the answer and display it elif value == 'VALUE': current_equation = text lexer = Lexer(current_equation) tokens = lexer.generate_tokens() parser = Parser(tokens) tree = parser.parse() if not tree: self.equation.insert(0, "Error") interpreter = Interpreter() answer = interpreter.visit(tree) self.equation.delete(-1, END) self.equation.insert(0, answer) # If user clicked any other button, then add it to the equation line else: self.equation.delete(0, END) self.equation.insert(-1, current_equation + value)
def __evaluate_exp(self, exp): lexer = Lexer(exp) tokens = lexer.generate_tokens() parser = Parser(tokens) tree = parser.parse() if not tree: raise Exception(f"invalid expression: {exp}") interpreter = Interpreter(self.start, self.stop, self.step) plot_points = interpreter.visit(tree) self.range = np.arange(self.start, self.stop, self.step) self.ax.plot(self.range, plot_points)
def main(): while True: text = input("calc> ") lexer = Lexer(text) tokens = list(lexer.generate_tokens()) parser = Parser(tokens) tree = parser.parse() if not tree: continue interpreter = Interpreter() result = interpreter.visit(tree) print(result)
from interpreter import Interpreter from lexer import Lexer from parser_ import Parser from interpreter import Interpreter while True: try: text = input("clac >") lexer = Lexer(text) tokens = lexer.generate_tokens() parser = Parser(tokens) tree = parser.parse() if not tree: continue interpreter = Interpreter() value = interpreter.visit(tree) print(value) except Exception as e: print(e)
from lexer import Lexer from parser_ import Parser from interpreter import Interpreter while True: text = input("> ") try: lexer = Lexer(text) tokens = list(lexer.generate_tokens()) # print(tokens) parser = Parser(tokens) node = parser.builtins() interpreter = Interpreter() result = interpreter.interpret(node) except Exception as e: print(e)
from parser_ import Parser from evaluator import Evaluator from context import Context from environment import * from values import Value global_env = Environment() global_env.set("null", Value(0)) global_func_env = FunctionEnvironment() context = Context("<program>", global_env, global_func_env) while True: text = input(">>> ") lexer = Lexer("<stdin>", text) tokens, errors = lexer.generate_tokens() if errors == None: # print(tokens) parser = Parser(tokens) ast = parser.parse() if ast.error == None: # print(ast.node) evaluator = Evaluator(ast.node, context) value = evaluator.evaluate() if value.error == None: print(value.value) else: print(value.error.as_string()) else: print(ast.error.as_string()) else:
file1 = open('test.txt', 'r') Lines = file1.readlines() token_list1 = list() all_tokens = list() # Analizador Léxico for t in Lines: linea = Lines.index(t) l = Lexer(t, log1, linea) if t == '}': pass print(colored("TOKENS: ", 'yellow')) token_list = l.generate_tokens() for tl1 in token_list : print(tl1) all_tokens.append(token_list) token_list1 += token_list new_lexer = Lexer(token_list1, log1, 0) new_lexer.verify_code() for lt in all_tokens: flag = False for gs in grammar_list: if lt[0].value == '}': flag = True break elif gs.validarCadena(lt):