Um sistema de representação intermediária para transformar árvores sintáticas da linguagem SC-DSL em estruturas de dados otimizadas.
O IR (Intermediate Representation) é uma biblioteca Rust que converte árvores sintáticas parseadas pela sc-dsl em uma representação intermediária estruturada e tipada. Essa representação facilita análises, transformações e geração de código posterior.
IR: Estrutura raiz que contém todos os alvéolos do sistemaAlveolus: Enum que representa diferentes tipos de elementos (atualmenteLarvie)Larvie: Representa entidades estruturadas com campos e comportamentosCasts: Define propriedades de campos com tipos e restriçõesInstinct: Modela aspectos comportamentais das entidades
Int: Números inteirosStr: Strings/textoBool: Valores booleanosBug(String): Tipos personalizados definidos pelo usuário
Vital: NotNull - campo obrigatórioCore: PrimaryKey - chave primáriaRoot: Unique - valor único
use ir::sc_tree_to_ir;
use sc_dsl::dsl::parser::tree::Tree;
// Parse da entrada SC-DSL
let tree = Tree::parse_input("
bug Bird
gene energy Int
ethics fly
end
".to_string()).unwrap();
// Conversão para IR
let ir = sc_tree_to_ir(tree);
println!("{:?}", ir);IR {
alveolus: [
Alveolus::Larvie(Larvie {
primor: "Bird",
casts: [
Casts {
primor: "energy",
flora: Flora::Int,
seals: [Seal::Vital]
}
],
instincts: [
Instinct {
echo: "fly"
}
]
})
]
}Execute os testes com:
cargo test- ✅ Conversão de
BugparaLarvie - ✅ Conversão de
GeneparaCasts - ✅ Conversão de
EthicsparaInstinct - ✅ Mapeamento de tipos
SpecieparaFlora - ✅ Integração completa do pipeline de conversão
O projeto inclui documentação UML em doc/ir.puml que ilustra a estrutura completa do sistema:
@startuml IR
class IR {
alveolus Alveolus[]
}
enum Alveolus {
Larvie
}
class Larvie {
primor Str
casts Casts[]
instincts Instinct[]
}
// ... (veja doc/ir.puml para o diagrama completo)
@endumlsc-dsl: Parsing e AST da linguagem SC-DSLserde: Serialização/deserializaçãoserde_json: Suporte a JSON
src/
├── lib.rs # API pública
└── ir/
├── mod.rs # Módulo principal do IR
├── alveolus.rs # Enum de tipos de elementos
├── larvie.rs # Estruturas de entidades
├── casts.rs # Propriedades de campos
├── instincts.rs # Aspectos comportamentais
├── flora.rs # Sistema de tipos
└── seal.rs # Restrições de dados
- Conversão Automática: Transforma AST de SC-DSL em IR estruturado
- Sistema de Tipos Robusto: Suporte a tipos primitivos e personalizados
- Modelagem Comportamental: Captura aspectos comportamentais via instintos
- Restrições de Dados: Sistema de selos para validação e restrições
- Serialização: Suporte completo a JSON via Serde
- Testes Abrangentes: Cobertura de testes para todas as funcionalidades
Este projeto está licenciado sob os termos especificados no arquivo LICENSE.