# 1. Importamos a ferramenta Lark, que é um "construtor de analisadores" (parsers).
# Imagine que o Lark é um mestre de obras que sabe ler uma planta (gramática) 
# e construir uma máquina que entende textos.
from lark import Lark

# 2. Definimos a "Gramática". É aqui que explicamos as regras da nossa linguagem.
# Usamos uma string (texto) de várias linhas com aspas triplas.
gramatica = """
    # 'start' é o ponto de entrada. O '?' diz para simplificar a árvore se possível.
    ?start: soma
    
    # Aqui dizemos: uma 'soma' é formada por um NÚMERO, o símbolo "+" e outro NÚMERO.
    soma: NUMBER "+" NUMBER
    
    # Importamos definições prontas do Lark:
    # NUMBER: sabe reconhecer números como 10, 20, 3.14.
    # WS: significa 'White Space' (espaços, tabs, quebras de linha).
    %import common.NUMBER
    %import common.WS
    
    # Dizemos ao computador para IGNORAR espaços. 
    # Assim, "10+20" ou "10   +   20" serão lidos da mesma forma.
    %ignore WS
"""

# 3. Criamos o nosso 'parser' (analisador).
# Passamos a nossa planta (gramatica) para o Lark construir o motor de análise.
parser = Lark(gramatica)

# 4. Pedimos ao parser para analisar o texto "10 + 20".
# O comando .parse() transforma o texto em uma estrutura de dados chamada 'Árvore'.
arvore = parser.parse("10 + 20")

# 5. O .pretty() serve para imprimir essa árvore de um jeito "bonitinho" no console.
# Isso ajuda o aluno a visualizar a hierarquia da operação.
print(arvore.pretty())