Expand description
ยง๐ ๏ธ oak-fsharp Developer Guide
Welcome to the internal implementation of the F# parser. This module provides the core logic for tokenizing and parsing F# source code into a high-fidelity syntax tree.
ยง๐ฆ Core Components
- Lexer: Tokenizes F# source code, handling indentation-sensitive syntax, computation expressions, and active patterns with full fidelity.
- Parser: Implements the F# grammar, producing a Green Tree that represents the concrete syntax.
- AST: Provides a type-safe Red Tree facade for easy traversal and analysis.
- Language: Defines the
FSharpLanguageconfiguration and integration with the Oak framework.
ยง๐ Usage Example
ยงBasic Parsing
use oak_fsharp::{FSharpParser, SourceText, FSharpLanguage};
fn parse_fsharp_code(code: &str) {
let source = SourceText::new(code);
let config = FSharpLanguage::new();
let parser = FSharpParser::new(&config);
let result = parser.parse(&source);
if result.is_success() {
let root = result.root();
println!("AST Root: {:?}", root);
}
}ยงIncremental Parsing
use oak_fsharp::{FSharpParser, SourceText, FSharpLanguage};
fn incremental_update(old_code: &str, new_code: &str) {
let config = FSharpLanguage::new();
let mut parser = FSharpParser::new(&config);
// Initial parse
let initial_source = SourceText::new(old_code);
let _ = parser.parse(&initial_source);
// Incremental update
let updated_source = SourceText::new(new_code);
let result = parser.parse(&updated_source);
if result.is_success() {
println!("Incremental parse completed successfully.");
}
}ยง๐ Diagnostics
The parser provides detailed diagnostics for syntax errors, including error ranges and helpful messages.
let result = parser.parse(&source);
for diagnostic in result.diagnostics() {
println!("Error at {:?}: {}", diagnostic.range(), diagnostic.message());
}Fsharp support for the Oak language framework.
Re-exportsยง
pub use ast::FSharpRoot;pub use builder::FSharpBuilder;pub use parser::element_type::FSharpElementType;
Modulesยง
Structsยง
- FSharp
Language - F# language implementation.
- FSharp
Lexer - F# lexer
Enumsยง
- FSharp
Token Type - F# token types