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)
예제 #2
0
 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)
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
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)
예제 #6
0
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:
예제 #7
0
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):