from lark import Lark, Transformer

# Gramática simples: aceita apenas um número por vez
gramatica_primos = """
    ?start: entrada
    entrada: NUMBER
    
    %import common.NUMBER
    %import common.WS
    %ignore WS
"""

class ValidadorPrimos(Transformer):
    def entrada(self, tokens):
        # Converte o token NUMBER (texto) para int
        numero = int(tokens[0])
        
        if numero < 2:
            return f"ERRO: {numero} não é primo (menor que 2)."
        
        # Lógica de verificação de número primo
        for i in range(2, int(numero**0.5) + 1):
            if numero % i == 0:
                return f"RECUSADO: {numero} é composto (divisível por {i})."
        
        return f"ACEITO: {numero} é um número primo!"

# --- Execução do Sistema ---
parser = Lark(gramatica_primos)
validador = ValidadorPrimos()

def testar_chave(texto):
    try:
        # 1. Faz o Parsing (Sintaxe)
        arvore = parser.parse(texto)
        # 2. Faz a Transformação (Lógica/Semântica)
        resultado = validador.transform(arvore)
        print(resultado)
    except Exception as e:
        print(f"ERRO DE SINTAXE: Entrada inválida.")

# Testes
testar_chave("1")   # Não primo
testar_chave("13")  # Primo
testar_chave("15")  # Composto
testar_chave("abc") # Erro de Sintaxe