oak-d

Crates.iooak-d
lib.rsoak-d
version0.0.1
created_at2025-10-20 14:45:40.881989+00
updated_at2026-01-23 04:21:08.906853+00
descriptionHigh-performance incremental D language parser for the oak ecosystem with flexible configuration, supporting systems programming and native development.
homepagehttps://github.com/ygg-lang/oaks
repositoryhttps://github.com/ygg-lang/oaks
max_upload_size
id1892034
size99,289
publisher (github:ygg-lang:publisher)

documentation

https://docs.rs/oak-d

README

Oak D Parser

Crates.io Documentation

High-performance incremental D parser for the oak ecosystem with flexible configuration, optimized for code analysis and compilation.

🎯 Overview

Oak D is a robust parser for D, designed to handle complete D syntax including modern features like templates, mixins, and functional programming constructs. Built on the solid foundation of oak-core, it provides both high-level convenience and detailed AST generation for code analysis and compilation.

✨ Features

  • Complete D Syntax: Supports all D features including modern specifications
  • Full AST Generation: Generates comprehensive Abstract Syntax Trees
  • Lexer Support: Built-in tokenization with proper span information
  • Error Recovery: Graceful handling of syntax errors with detailed diagnostics

🚀 Quick Start

Basic example:

use oak_d::{DLanguage, DParser};
use oak_core::{Parser, source::SourceText, parser::session::ParseSession};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let language = DLanguage::default();
    let parser = DParser::new(&language);
    let mut session = ParseSession::<DLanguage>::default();
    let source = SourceText::new(r#"
import std.stdio;

void main() {
    writeln("Hello, World!");
}
"#);
    
    let result = parser.parse(&source, &[], &mut session);
    println!("Parsed D program successfully.");
    Ok(())
}

📋 Parsing Examples

Basic Program Parsing

use oak_d::{DLanguage, DParser};
use oak_core::{Parser, source::SourceText, parser::session::ParseSession};

let language = DLanguage::default();
let parser = DParser::new(&language);
let mut session = ParseSession::<DLanguage>::default();
let source = SourceText::new("import std.stdio;\n\nvoid main() {\n    writeln(\"Hello, World!\");\n}");

let result = parser.parse(&source, &[], &mut session);
println!("Parsed D program successfully.");

Class and Template Parsing

use oak_d::{DLanguage, DParser};
use oak_core::{Parser, source::SourceText, parser::session::ParseSession};

let language = DLanguage::default();
let parser = DParser::new(&language);
let mut session = ParseSession::<DLanguage>::default();
let source = SourceText::new(r#"
class MyClass(T) {
    private T value;
    
    this(T val) {
        this.value = val;
    }
    
    T getValue() {
        return value;
    }
}

auto obj = new MyClass!int(42);
"#);

let result = parser.parse(&source, &[], &mut session);
println!("Parsed D program with classes and templates successfully.");

Function Declaration Parsing

use oak_d::{DLanguage, DParser};
use oak_core::{Parser, source::SourceText, parser::session::ParseSession};

let language = DLanguage::default();
let parser = DParser::new(&language);
let mut session = ParseSession::<DLanguage>::default();
let source = SourceText::new(r#"
int calculate(int a, int b, string operation) {
    switch (operation) {
        case "add": return a + b;
        case "subtract": return a - b;
        case "multiply": return a * b;
        default: return 0;
    }
}
"#);

let result = parser.parse(&source, &[], &mut session);
println!("Parsed D program with function declarations successfully.");

🔧 Advanced Features

Token-Level Parsing

use oak_d::{DLanguage, DParser};
use oak_core::{Parser, source::SourceText, parser::session::ParseSession};

let language = DLanguage::default();
let parser = DParser::new(&language);
let mut session = ParseSession::<DLanguage>::default();
let source = SourceText::new("void main() {}");
let result = parser.parse(&source, &[], &mut session);
// Token information is available in the parse result

Error Handling

use oak_d::{DLanguage, DParser};
use oak_core::{Parser, source::SourceText, parser::session::ParseSession};

let language = DLanguage::default();
let parser = DParser::new(&language);
let mut session = ParseSession::<DLanguage>::default();
let source = SourceText::new(r#"
void main() {
    writeln("Hello, World!") // Missing semicolon
}
"#);

let result = parser.parse(&source, &[], &mut session);
if let Err(e) = result.result {
    println!("Parse error: {:?}", e);
}

🏗️ AST Structure

The parser generates a comprehensive AST with the following main structures:

  • Program: Root container for D programs
  • Module: Module declarations
  • Import: Import statements
  • Function: Function definitions
  • Class: Class definitions
  • Template: Template declarations
  • Mixin: Mixin declarations

📊 Performance

  • Streaming: Parse large D files without loading entirely into memory
  • Incremental: Re-parse only changed sections
  • Memory Efficient: Smart AST node allocation
  • Fast Recovery: Quick error recovery for better IDE integration

🔗 Integration

Oak D integrates seamlessly with:

  • Compilers: Front-end for D compilers
  • Static Analysis Tools: Code quality and security analysis
  • IDE Support: Language server protocol compatibility
  • Code Generation: Generating code from AST

📚 Examples

Check out the examples directory for comprehensive examples:

  • Complete D program parsing
  • Class and template analysis
  • Code transformation
  • Integration with development workflows

🤝 Contributing

Contributions are welcome!

Please feel free to submit pull requests at the project repository or open issues.

Commit count: 80

cargo fmt