from lark import Lark

# Nossa gramática integrada
minha_gramatica = """
    start: funcao
    funcao: "def" ID "(" parametros ")" bloco
    parametros: (ID ("," ID)*)?
    bloco: "{" instrucao* "}"
    instrucao: ID "=" NUMBER ";"

    ID: /[a-zA-Z_][a-zA-Z0-9_]*/
    NUMBER: /[0-9]+/

    %import common.WS
    %ignore WS
"""

# Criando o Parser (Usando LALR - Bottom-Up para maior performance)
parser = Lark(minha_gramatica, parser='lalr')

# Código a ser testado
codigo_fonte = "def calcular(x, y) { resultado = 100; }"

try:
    arvore = parser.parse(codigo_fonte)
    print("Sucesso! Árvore Sintática Gerada:")
    print(arvore.pretty())
except Exception as e:
    print(f"Erro de Sintaxe: {e}")