Skip to content

dryadlang/Dryad

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Dryad Programming Language

Dryad é uma linguagem de programação moderna, interpretada, com sintaxe expressiva e tipagem dinùmica.

Dryad Logo Oak Package Manager License Rust

🎯 Pilares de Desenvolvimento

  1. Test-Driven Development (TDD) - Cada funcionalidade possui testes abrangentes
  2. Sistema de Erros Padronizado - CĂłdigos de erro categorizados e documentados
  3. CLI Intuitivo - Interface de linha de comando rica em funcionalidades
  4. Gestor de Pacotes (Oak) - Ferramenta independente para gerenciamento de projetos
  5. Modularidade - Componentes desacoplados para mĂĄxima testabilidade
  6. Completude sem Complexidade - CĂłdigo completo mas sem over-engineering

📩 Estrutura do Projeto

✹ Principais Características

  • 🚀 Sintaxe Simples: FĂĄcil de aprender e usar
  • 📩 Sistema Oak: Package manager modular integrado
  • 🔗 Imports/Exports: Sistema modular avançado (using vs use)
  • 📚 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.

🚀 Início Rápido

1. Instalação

# 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

2. Primeiro Programa

// 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);

3. Sistema Oak (Package Manager)

# Inicializar projeto Oak
dryad oak init

# Listar dependĂȘncias
dryad oak list

# Adicionar dependĂȘncia (futuro)
dryad oak add math-utils

4. Sistema de Imports

// 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();

📁 Estrutura do Projeto

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

🚀 Funcionalidades Implementadas

✅ Lexer (AnĂĄlise LĂ©xica)

  • ComentĂĄrios de linha (//) e bloco (/* */)
  • Tratamento de espaços em branco
  • Completamente funcional

✅ Parser (Análise Sintática)

  • AnĂĄlise recursiva descendente
  • Completamente funcional

✅ Runtime/Interpretador

  • Tratamento robusto de erros de tipo
  • Completamente funcional

✅ Sistema de Erros

  • 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

✅ CLI (dryad)

  • 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

✅ Gestor de Pacotes (Oak)

  • 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
  • Criação do registry (repositorio geral de dependencias)

đŸ§Ș Cobertura de Testes

Total: 79 testes passando

  • Lexer: 24 testes
  • Parser: 25 testes
  • Runtime: 30 testes
  • Sistema de erros integrado em todos os componentes

▶ Exemplos de Uso

Executando cĂłdigo Dryad

# 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

Criando projeto com Oak

# 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

Modo Interativo (REPL)

cargo run --bin dryad repl
# dryad> 2 + 3
# => 5
# dryad> "Hello" + " World"
# => Hello World

đŸ—ïž Pipeline de Execução

CĂłdigo Fonte (.dryad)
    ↓
Lexer → Tokens
    ↓  
Parser → AST (Abstract Syntax Tree)
    ↓
Interpreter → Resultado

🚀 Começando

# 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

📋 Sintaxe Suportada (v0.1)

Tipos de Dados

  • NĂșmeros: 42, 3.14, -5
  • Strings: "Hello World", "OlĂĄ\nMundo"
  • Booleanos: true, false
  • Null: null

Operadores

  • AritmĂ©ticos: +, -, *, /
  • Comparação: ==, !=, <, >, <=, >=
  • LĂłgicos: &&, ||, !

Exemplos VĂĄlidos

// 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

🔼 Próximas Funcionalidades

  • DeclaraçÔes de variĂĄveis (let x = 5;)
  • Estruturas de controle (if, while, for)
  • FunçÔes definidas pelo usuĂĄrio
  • Arrays e objetos
  • Sistema de mĂłdulos e imports
  • Instalação real de pacotes no Oak

đŸ€ Contribuindo

Este projeto segue rigorosamente os princĂ­pios de TDD. Para contribuir:

  1. Escreva testes para a nova funcionalidade
  2. Implemente a funcionalidade para passar nos testes
  3. Refatore mantendo todos os testes passando
  4. Adicione cĂłdigos de erro apropriados quando necessĂĄrio

📄 Licença

MIT License - veja o arquivo LICENSE para detalhes.

About

🌳 Dryad is a linear programing language. It is designed to be a simple language that is easy to learn and use. It is designed to be an plug and play language.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors