Dryad é uma linguagem de programação moderna, interpretada, com sintaxe expressiva e tipagem dinâmica.
- Test-Driven Development (TDD) - Cada funcionalidade possui testes abrangentes
- Sistema de Erros Padronizado - Códigos de erro categorizados e documentados
- CLI Intuitivo - Interface de linha de comando rica em funcionalidades
- Gestor de Pacotes (Oak) - Ferramenta independente para gerenciamento de projetos
- Modularidade - Componentes desacoplados para máxima testabilidade
- Completude sem Complexidade - Código completo mas sem over-engineering
- 🚀 Sintaxe Simples: Fácil de aprender e usar
- 📦 Sistema Oak: Package manager modular integrado
- 🔗 Imports/Exports: Sistema modular avançado (
using
vsuse
) - 📚 Common Libraries: Bibliotecas nativas organizadas
- ⚡ Performance: Interpretador otimizado em Rust
- 🛠️ CLI Moderna: Interface de linha de comando completa
- 🔧 APIs Externas: Suporte para modificação do oak package manager e cli.
# Clone o repositório git clone https://github.com/dryad-lang/dryad.git cd dryad # Compile o projeto cargo build --release # Execute um script ./target/release/dryad script.dryad
// hello.dryad print("Hello, Dryad!"); let nome = "Mundo"; print("Olá, " + nome + "!"); // Classes com métodos estáticos class Math { static function square(x) { return x * x; } } let resultado = Math.square(5); print("5² = " + resultado);
# Inicializar projeto Oak dryad oak init # Listar dependências dryad oak list # Adicionar dependência (futuro) dryad oak add math-utils
// Bibliotecas do sistema (using) using IO.Console; using Core.Types; // Arquivos locais (use) use './utils/helper.dryad'; use '../shared/common.dryad'; // Uso das funcionalidades Console.println("Hello World!"); let type = Types.typeof(42); helper.processData();
dryad/ ├── crates/ │ ├── dryad_errors/ # Sistema de erros e códigos padronizados │ ├── dryad_lexer/ # Tokenização (análise léxica) │ ├── dryad_parser/ # Parser e construção de AST │ ├── dryad_runtime/ # Interpretador principal │ ├── dryad_cli/ # CLI para rodar código Dryad │ └── oak/ # Gestor de pacotes ├── Cargo.toml # Workspace principal └── README.md
- Tokenização de números (inteiros e decimais)
- Strings com sequências de escape
- Identificadores e palavras-chave
- Operadores aritméticos, lógicos e de comparação
- Comentários de linha (
//
) e bloco (/* */
) - Tratamento de espaços em branco
- 24 testes cobrindo todos os casos
- Análise recursiva descendente
- Precedência correta de operadores
- Expressões aritméticas complexas
- Operadores lógicos e de comparação
- Suporte a parênteses
- 25 testes validando parsing
- Avaliação de expressões aritméticas
- Operações com strings (concatenação)
- Operadores lógicos com truthiness
- Comparações numéricas
- Tratamento robusto de erros de tipo
- 30 testes cobrindo execução
- Códigos estruturados por categoria:
- 1000-1999: Erros do Lexer
- 2000-2999: Erros do Parser
- 3000-3999: Erros de Runtime
- 4000-4999: Erros do Sistema de Tipos
- 5000-5999: Erros de I/O
- 6000-6999: Erros do Sistema de Módulos
- 7000-7999: Erros de Sintaxe
- 8000-8999: Avisos (Warnings)
- 9000-9999: Erros de Sistema
- Mensagens de erro informativas
- Rastreamento de linha e coluna
-
dryad run <arquivo>
- Executa código Dryad -
dryad run <arquivo> --verbose
- Mostra tokens e AST -
dryad check <arquivo>
- Valida sintaxe -
dryad tokens <arquivo>
- Debug: mostra tokens -
dryad repl
- Modo interativo -
dryad version
- Informações da versão
-
oak init <nome>
- Cria novo projeto -
oak info
- Informações do projeto -
oak list
- Lista dependências -
oak install <pacote>
- Adiciona dependência (estrutura pronta) -
oak remove <pacote>
- Remove dependência -
oak run <script>
- Executa scripts definidos -
oak clean
- Limpa cache - Arquivo
oaklibs.json
com configuração completa
- ✅ 🖥️ Console I/O #console_io
- ✅ 🎨 Terminal ANSI #terminal_ansi
- ✅ 📁 File I/O #file_io
- ✅ 💾 Binary I/O #binary_io
- ✅ ⏰ Time/Date #time / #date_time
- ✅ 🖥️ System Environment #system_env
- ✅ 🔐 Cryptography #crypto
- ✅ 🐛 Debug #debug
- ✅ 📄 Encode/Decode #encode_decode
- ✅ 🛠️ Utilities #utils
- ✅ 🌐 HTTP Client / Server #http / #http_client / #http_server
- ✅ 🌐 Tcp #tcp
- ✅ 🧩 Udp #udp
# Expressão simples echo "5 + 3 * 2" > exemplo.dryad cargo run --bin dryad run exemplo.dryad # Output: 11 # Modo verboso (mostra tokens e AST) cargo run --bin dryad run exemplo.dryad --verbose # Validar sintaxe cargo run --bin dryad check exemplo.dryad
# Criar novo projeto cargo run --bin oak init meu-projeto # Navegar e ver informações cd meu-projeto cargo run --bin oak info cargo run --bin oak list
cargo run --bin dryad repl # dryad> 2 + 3 # => 5 # dryad> "Hello" + " World" # => Hello World
Código Fonte (.dryad) ↓ Lexer → Tokens ↓ Parser → AST (Abstract Syntax Tree) ↓ Interpreter → Resultado
# Build do projeto cargo build # Executar todos os testes cargo test # Executar CLI cargo run --bin dryad --help # Executar Oak cargo run --bin oak --help
- Números:
42
,3.14
,-5
- Strings:
"Hello World"
,"Olá\nMundo"
- Booleanos:
true
,false
- Null:
null
- Aritméticos:
+
,-
,*
,/
- Comparação:
==
,!=
,<
,>
,<=
,>=
- Lógicos:
&&
,||
,!
// Aritmética (5 + 3) * 2 // Comparações 10 > 5 // Lógica true && false || !true // Strings "Hello" + " " + "World" // Expressões complexas (2 + 3) * 4 == 20 && true
Este projeto segue rigorosamente os princípios de TDD. Para contribuir:
- Escreva testes para a nova funcionalidade
- Implemente a funcionalidade para passar nos testes
- Refatore mantendo todos os testes passando
- Adicione códigos de erro apropriados quando necessário
MIT License - veja o arquivo LICENSE para detalhes.