maoe
v2.0.0
Published
Silvio Santos Programming Language
Readme
MAOE – Micro Auditório Orientado a Eventos
MAOE é uma linguagem de programação interpretada, inspirada na estética dos programas de auditório brasileiros. Mais do que uma brincadeira, é uma DSL (Domain Specific Language) funcional, com tipagem dinâmica, controle de fluxo e proteção contra loops infinitos.
"MAOE = Micro Auditório Orientado a Eventos"
🚀 Instalação e Uso
Pré-requisitos
- Node.js (v18+)
Instalação
Clone o projeto e instale as dependências:
git clone https://github.com/testes/maoe.git
cd maoe
npm install
npm run buildExecutando Programas
Para rodar um arquivo .maoe:
# Link global (opcional)
npm link
# Executar arquivo
maoe examples/pontos.maoe
# Ou via npm start
npm start examples/pontos.maoe📜 Estrutura da Linguagem
Todo programa MAOE segue o fluxo de um programa de auditório:
MA_OEEE // Abertura
VAMOS_BRINCAR // Início lógico (opcional em v1)
...
E_ACABOU // EncerramentoVariáveis e Tipos
VEM_PRA_CÁ pontos RECEBE 100 // Declaração (Number)
VEM_PRA_CÁ nome RECEBE "Silvio" // String
pontos MAIS_DINHEIRO 50 // +=
pontos TIRA_DINHEIRO 10 // -=Entrada e Saída
MOSTRA "Qual seu nome?"
VEM_PRA_CÁ nome RECEBE PERGUNTINHA // Input String
VEM_PRA_CÁ vai_jogar RECEBE TEM_CERTEZA_DISSO // Input Boolean (Confirm)Controle de Fluxo
Condicionais (VALENDO)
VALENDO (pontos > 1000) {
CERTA_RESPOSTA {
MOSTRA "É milionário!"
}
ERRROUU {
MOSTRA "Ainda não..."
}
}Repetição (RODA)
Loops possuem proteção automática contra Infinite Loop (MAOE_INFINITE_AUDITORIO).
RODA (pontos > 0) {
MOSTRA "Rodando..."
}🛡️ Segurança e Erros
A MAOE possui um sistema de proteção de runtime (A.K.A. "Diretor do Programa").
| Erro | Código | Descrição |
| :--- | :--- | :--- |
| Loop Infinito | MAOE_INFINITE_AUDITORIO | Disparado se um loop executa 1000+ vezes sem interação. "Vai estourar o horário da emissora!" |
| Sintaxe | MAOE_SYNTAX_ERROR | Erro de parsing ou token inesperado. |
🧩 Exemplo Completo
Veja examples/pontos.maoe para um jogo de perguntas e respostas completo.
MA_OEEE
VEM_PRA_CÁ saldo RECEBE 100
RODA (saldo > 0) {
MOSTRA "Vai apostar?"
VALENDO (TEM_CERTEZA_DISSO) {
saldo MAIS_DINHEIRO 100
} ERRROUU {
PERDEU_A_VEZ // Break
}
}
E_ACABOU🛠️ Desenvolvimento
- Lexer: Tokeniza Unicode (
VEM_PRA_CÁsuporta acentos). - Parser: Recursive Descent Parser com suporte a blocos implícitos e explícitos.
- CodeGen: Transpila para JavaScript (ESNext).
- Runtime: Node.js com polyfills (
readline-sync) para interação síncrona.
Autores: William Gerhard & Antigravity
