from lark import Lark

# =============================================================
# A GRAMÁTICA DA TOMADA DE DECISÃO
# =============================================================
gramatica_robo = """
    # O 'start' é o nosso ponto de origem (Raiz da Árvore).
    start: comando

    # A REGRA DE OU (Bifurcação):
    # O símbolo '|' funciona como uma encruzilhada. 
    # O Parser olha para o Token e decide: "Vou para o galho MOVER ou para o PARAR?"
    comando: mover | parar
    
    # Galho 1: Exige a palavra 'MOVER' seguida de um número.
    mover: "MOVER" NUMERO
    
    # Galho 2: Exige apenas a palavra 'PARAR'. É uma folha simples.
    parar: "PARAR"
    
    # Definições de Terminais (Tokens finais)
    NUMERO: /[0-9]+/
    
    %import common.WS
    %ignore WS
"""

# Inicializamos o motor de análise (O Arquiteto)
parser = Lark(gramatica_robo)

# --- ANÁLISE DO CAMINHO "MOVER" ---
print("--- DECISÃO 1: MOVER ---")
# O Parser lê "MOVER", vê que bate com a regra 'mover' e desce por esse galho.
print(parser.parse("MOVER 10").pretty())

# --- ANÁLISE DO CAMINHO "PARAR" ---
print("\n--- DECISÃO 2: PARAR ---")
# O Parser lê "PARAR", ignora o galho 'mover' e desce pelo galho 'parar'.
print(parser.parse("PARAR").pretty())