# SIMULADOR DAS ETAPAS DE PROCESSAMENTO DE UM COMPILADOR
def simulador_compilador(linha_codigo):
    print(f"--- FASE 1: ANÁLISE LÉXICA ---")
    # Quebrando a string em 'palavras' (tokens)
    tokens = linha_codigo.replace('=', ' = ').replace('+', ' + ').split()
    print(f"Tokens identificados: {tokens}")
    
    print(f"\n--- FASE 2: ANÁLISE SINTÁTICA ---")
    # Verificando se a estrutura é: VARIÁVEL = VALOR + VALOR
    if len(tokens) == 5 and tokens[1] == "=":
        print("Estrutura gramatical válida!")
        arvore = {"atribuicao": {"alvo": tokens[0], "expressao": [tokens[2], tokens[3], tokens[4]]}}
        print(f"Árvore Sintática (AST): {arvore}")
    
    print(f"\n--- FASE 3: ANÁLISE SEMÂNTICA ---")
    # Verificando se os valores são números
    try:
        val1 = int(tokens[2])
        val2 = int(tokens[4])
        print("Tipos validados: Números Inteiros detectados.")
    except ValueError:
        print("Erro Semântico: Você tentou somar algo que não é número!")
        return

    print(f"\n--- FASE 4 E 5: OTIMIZAÇÃO E SÍNTESE ---")
    resultado_otimizado = val1 + val2
    print(f"Otimização: Substituindo '10 + 5' por '{resultado_otimizado}'")
    print(f"Código Final Gerado (Python): {tokens[0]} = {resultado_otimizado}")

# Execução do teste
simulador_compilador("Σ = 10 + 5")