from lark import Lark

# =============================================================
# GRAMÁTICA PARA COMANDOS ANINHADOS
# =============================================================
gramatica_if = """
    ?start: programa
    programa: comando+

    ?comando: acao | se_entao

    # Regra da Ação: ex: LIGAR luz;
    acao: "LIGAR" ID ";" 
        | "DESLIGAR" ID ";"

    # Regra do SE: note que 'comando' aparece dentro da própria regra!
    # Isso se chama RECURSIVIDADE, permitindo o aninhamento.
    se_entao: "IF" condicao "THEN" "{" comando+ "}"

    # Sem recursividade, aceitando apenas 1 IF
    #se_entao: "IF" condicao "THEN" "{" acao "}"

    condicao: ID "==" NUMBER    
    ID: /[a-z_]+/

    %import common.NUMBER
    %import common.WS
    %ignore WS
"""

parser = Lark(gramatica_if)

# --- ENTRADA PARA TESTE (ANINHAMENTO) ---
codigo = """
IF movimento == 1 THEN {
    LIGAR sala;   
}
"""

try:
    print("--- ESTRUTURA SINTÁTICA DO IF ANINHADO ---")
    arvore = parser.parse(codigo)
    print(arvore.pretty())
except Exception as e:
    print(f"❌ Erro Sintático: {e}")