Especificação da Linguagem Verbo

Versão 2.0 — Em Desenvolvimento — Autor: Juan / Projeto Crom

# Visão Geral

Verbo é uma linguagem de programação transpilada que utiliza a gramática da norma culta do Português Brasileiro como sintaxe. Transpilada para Go, garante performance nativa.

🤝 O que é uma linguagem de programação? É um idioma que você usa para "conversar" com o computador. Em vez de usar inglês como a maioria das linguagens, o Verbo usa português brasileiro! Transpilar significa traduzir o código de um idioma para outro — no caso, de Verbo para Go (outra linguagem muito rápida).

Princípios de Design

  • Legibilidade máxima — Código deve parecer prosa técnica
  • Gramática como semântica — Artigos, verbos e preposições têm significado
  • Tipagem forte inferida — O sistema de tipos é inferido pela gramática
  • Sem ambiguidade — Ordem SVO (Sujeito-Verbo-Objeto) estrita

# Tipos de Dados

🤝 O que são tipos de dados? Imagine que cada dado que você guarda no computador tem uma "etiqueta". Um número inteiro (1, 2, 3) é diferente de um texto ("Olá"). Os tipos ajudam o computador a saber como tratar cada informação. Texto = palavras e frases. Inteiro = números sem vírgula. Decimal = números com vírgula. Lógico = Verdadeiro ou Falso (sim/não). Lista = uma coleção de coisas.
Tipo Descrição Exemplo
Texto Cadeia de caracteres "Olá"
Inteiro Número inteiro 42
Decimal Ponto flutuante 3.14
Lógico Verdadeiro/Falso Verdadeiro
Lista Coleção ordenada [1, 2, 3]
Nulo Ausência de valor Nulo

# Variáveis e Constantes

🤝 O que é uma variável? Pense numa caixa etiquetada onde você guarda um valor. O nome da caixa é o nome da variável, e dentro dela está o valor. Em Verbo, usamos artigos do português: "O"/"A" criam caixas que nunca mudam (constantes), e "Um"/"Uma" criam caixas que podem mudar (variáveis). "é" define algo permanente (como "A água é molhada") e "está" algo temporário (como "O tempo está chuvoso").

Constantes (Artigo Definido)

O limite é 100.
A mensagem é "Olá, Mundo!".
Mini Playground

Variáveis (Artigo Indefinido)

Um contador está 0.
Uma taxa está 0.15.

Semântica de Estado

  • é → Atribuição estática (natureza) — imutável
  • está → Atribuição de estado (temporário) — mutável

# Funções

🤝 O que é uma função? É como uma receita de bolo. Você dá um nome para ela ("Calcular"), define os ingredientes ("valor: Inteiro") e descreve o passo a passo. Depois, pode "chamar" essa receita quantas vezes quiser com ingredientes diferentes. A palavra "Para" inicia a receita, "usando" define os ingredientes, e "Retorne" devolve o resultado final.
Para Calcular usando (valor: Inteiro):
    Retorne valor + 10.

O resultado é Calcular com (5).
Exibir com (resultado).
Mini Playground

# Controle de Fluxo

🤝 O que é controle de fluxo? É como uma placa de trânsito no código. "Se" é uma pergunta: "Se isso for verdade, faça isso. Senão, faça aquilo." Exemplo do dia a dia: "Se estiver chovendo, leve guarda-chuva. Senão, leve óculos de sol." O computador segue a mesma lógica!
Se a idade for menor que 18, então:
    Exibir com ("Menor de idade").
Senão:
    Exibir com ("Maior de idade").
Mini Playground

# Loops

🤝 O que é um loop? É quando você quer repetir algo várias vezes sem ter que escrever a mesma coisa toda hora. "Repita 10 vezes" = faz algo 10 vezes. "Enquanto" = continua fazendo enquanto uma condição for verdadeira (como "enquanto tiver fome, coma"). "Para cada" = faz algo para cada item de uma lista.
Repita 5 vezes:
    Exibir com ("Repetindo!").
Mini Playground

# Operadores

🤝 O que são operadores? São os símbolos de matemática que você já conhece! + soma, - subtrai, * multiplica, / divide. Simples assim. Para juntar dois textos, usamos "e" — como na frase "João e Maria".

Aritméticos

+ Adição
- Subtração
* Multiplicação
/ Divisão

Comparação em Português

menor que → <
maior que → >
igual → ==

# Entidades v2.0

🤝 O que é uma Entidade? Imagine uma ficha cadastral. Uma Entidade "Pessoa" é um modelo de ficha com campos como "Nome" e "Idade". Quando você cria "um novo Pessoa", está preenchendo uma ficha real com dados. É como a diferença entre o formulário em branco (a Entidade) e o formulário preenchido (a instância).
A Entidade Pessoa contendo (Nome: Texto, Idade: Inteiro).

Um cliente é Pessoa com ("Ada", 36).
Exibir com (cliente).
Mini Playground

# Listas v2.0

🤝 O que é uma Lista? É como uma fila de supermercado. Cada pessoa (ou item) tem uma posição. A posição começa em 0 (sim, programadores contam a partir do zero!). [10, 20, 30] é uma lista com 3 números. O primeiro item é lista[0] = 10.
Uma precos é [10, 20, 30].
O primeiro é precos[0].
Exibir com (primeiro).

# Concorrência v2.0

🤝 O que é Concorrência? Imagine que você tem 3 tarefas: lavar roupa, cozinhar e limpar a casa. Normalmente faria uma de cada vez. Com concorrência, você inicia as três ao mesmo tempo! "Simultaneamente" faz exatamente isso — cada instrução dentro roda em paralelo, como ter 3 funcionários trabalhando ao mesmo tempo.
Simultaneamente:
    Exibir com ("Tarefa 1").
    Exibir com ("Tarefa 2").
Mini Playground

# Tratamento de Erros v2.0

🤝 O que é tratamento de erros? Imagine que você está tentando abrir uma porta. Se ela estiver trancada, você não quer que seu programa "quebre" — você quer lidar com a situação. "Tente" = "tente fazer isso". "Capture" = "se der errado, faça isso em vez". "Sinalize" = "avise que algo deu errado!". É como ter um plano B.
Tente:
    Sinalize com ("Saldo insuficiente!").
Capture erro:
    Exibir com (erro).
Mini Playground

# BibVerbo (Biblioteca Padrão)

🤝 O que é uma biblioteca? São "poderes extras" prontos para usar. Em vez de inventar tudo do zero, você inclui uma biblioteca e ganha acesso a funções que alguém já criou. Matematica = funções de cálculo. Texto = manipulação de palavras. Html = criar páginas web!

Matematica

  • Absoluto(x)
  • Teto(x)
  • Piso(x)
  • Maximo(a,b)
  • Raiz(x)

Texto

  • Maiusculas(t)
  • Minusculas(t)
  • Contem(t,s)
  • Tamanho(t)

Html

  • CriarElemento(t,c)
  • CriarPagina(t,c)
  • CriarLink(u,t)
  • CriarLista(i...)

# Palavras Reservadas

Palavra Função
O/A Artigo definido (constante)
Um/Uma Artigo indefinido (variável)
é Atribuição permanente
está Atribuição temporária
Para Declaração de função
Se / Senão Condicional
Repita / Enquanto Loops
Simultaneamente Concorrência
Tente / Capture Tratamento de erros
Exibir Saída padrão
Retorne Retorno de função
Incluir Importar pacote

# Arquitetura do Compilador

🤝 Como o Verbo funciona por dentro? Seu código passa por 4 etapas: (1) O Lexer lê seu texto e separa em "palavras" (tokens). (2) O Parser organiza essas palavras numa árvore lógica (AST). (3) O Transpiler converte essa árvore em código Go. (4) O Go compila num binário super rápido. É como traduzir um livro: primeiro você entende as palavras, depois as frases, depois reescreve em outro idioma!
.vrb Lexer Parser AST Transpiler .go Binário

Lexer pkg/lexer/

Scanner UTF-8, tokenização de keywords, literais, operadores.

Parser pkg/parser/

Recursive Descent com precedência de expressões.

AST pkg/ast/

Nós tipados: Programa, Variáveis, Funções, Se, Repita…

Transpiler pkg/transpiler/

Visitor pattern para gerar código Go compilável.