| Crates.io | oak-csharp |
| lib.rs | oak-csharp |
| version | 0.0.1 |
| created_at | 2025-10-20 12:21:47.487441+00 |
| updated_at | 2026-01-23 04:18:50.237078+00 |
| description | C# object-oriented programming language parser with support for modern .NET features and managed programming. |
| homepage | https://github.com/ygg-lang/oaks |
| repository | https://github.com/ygg-lang/oaks |
| max_upload_size | |
| id | 1891844 |
| size | 78,530 |
High-performance incremental C# parser for the oak ecosystem with flexible configuration, optimized for code analysis and compilation.
Oak C# is a robust parser for C#, designed to handle complete C# syntax including modern features. Built on the solid foundation of oak-core, it provides both high-level convenience and detailed AST generation for static analysis and code generation.
Basic example:
use oak_core::{Parser, SourceText, parser::session::ParseSession};
use oak_csharp::{CSharpParser, CSharpLanguage};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut session = ParseSession::<CSharpLanguage>::default();
let parser = CSharpParser::new();
let source = SourceText::new(r#"
using System;
class Program {
static void Main() {
Console.WriteLine("Hello, C#!");
}
}
"#);
let result = parser.parse(&[], &mut session);
println!("Parsed C# successfully.");
Ok(())
}
use oak_core::{Parser, SourceText, parser::session::ParseSession};
use oak_csharp::{CSharpParser, CSharpLanguage};
let mut session = ParseSession::<CSharpLanguage>::default();
let parser = CSharpParser::new();
let source = SourceText::new(r#"
public class Calculator {
public int Add(int a, int b) {
return a + b;
}
public int Subtract(int a, int b) {
return a - b;
}
}
"#);
let result = parser.parse(&[], &mut session);
println!("Class parsed successfully.");
use oak_core::{Parser, SourceText, parser::session::ParseSession};
use oak_csharp::{CSharpParser, CSharpLanguage};
let mut session = ParseSession::<CSharpLanguage>::default();
let parser = CSharpParser::new();
let source = SourceText::new(r#"
public interface IDrawable {
void Draw();
double Area { get; }
}
public class Circle : IDrawable {
public double Radius { get; set; }
public void Draw() {
Console.WriteLine($"Drawing circle with radius {Radius}");
}
public double Area => Math.PI * Radius * Radius;
}
"#);
let result = parser.parse(&[], &mut session);
println!("Interface parsed successfully.");
use oak_core::{Parser, SourceText, parser::session::ParseSession};
use oak_csharp::{CSharpParser, CSharpLanguage};
let mut session = ParseSession::<CSharpLanguage>::default();
let parser = CSharpParser::new();
let source = SourceText::new("int x = 42;");
let result = parser.parse(&[], &mut session);
println!("Token parsing completed.");
use oak_core::{Parser, SourceText, parser::session::ParseSession};
use oak_csharp::{CSharpParser, CSharpLanguage};
let mut session = ParseSession::<CSharpLanguage>::default();
let parser = CSharpParser::new();
let source = SourceText::new(r#"
public class Calculator {
public int Add(int a, int b) {
return a + b
}
}
# Missing semicolon
"#);
let result = parser.parse(&[], &mut session);
if let Some(errors) = result.result.err() {
println!("Parse errors found: {:?}", errors);
} else {
println!("Parsed successfully.");
}
The parser generates a comprehensive AST with the following main structures:
Oak C# integrates seamlessly with:
Check out the examples directory for comprehensive examples:
Contributions are welcome!
Please feel free to submit pull requests at the project repository or open issues.