from lark import Lark

# Gramática Sequencial (Top-Down)
# A ordem das regras após os dois pontos (:) define a obrigatoriedade
gramatica_receita = """
    start: receita
    
    # A sequência obrigatória: primeiro 'pegar', depois 'misturar', por fim 'cozinhar'
    receita: pegar_cmd misturar_cmd cozinhar_cmd
    
    pegar_cmd: "PEGAR" INGREDIENTE ";"
    misturar_cmd: "MISTURAR" ";"
    cozinhar_cmd: "COZINHAR" ";"
    
    INGREDIENTE: /[a-zA-Z_]+/
    
    %import common.WS
    %ignore WS
"""

parser = Lark(gramatica_receita)

# --- Teste 1: Receita Correta ---
print("--- Árvore da Receita Correta ---")
receita_ok = "PEGAR ovo; MISTURAR; COZINHAR;"
print(parser.parse(receita_ok).pretty())

# --- Teste 2: Erro de Ordem ---
print("\n--- Teste de Erro (Cozinhar antes de Pegar) ---")
receita_errada = "COZINHAR; PEGAR ovo; MISTURAR;"
try:
    parser.parse(receita_errada)
except Exception as e:
    print("❌ Erro Sintático: Você não pode cozinhar sem antes pegar os ingredientes!")