Skip to main content

sage_parser/
lib.rs

1//! Lexer and parser for the Sage language.
2//!
3//! This crate provides tokenization and parsing for Sage source code,
4//! transforming source text into a typed Abstract Syntax Tree (AST).
5//!
6//! # Example
7//!
8//! ```
9//! use sage_parser::{lex, parse};
10//! use std::sync::Arc;
11//!
12//! let source = r#"
13//!     agent Main {
14//!         on start {
15//!             emit(42);
16//!         }
17//!     }
18//!     run Main;
19//! "#;
20//!
21//! let lex_result = lex(source).expect("lexing failed");
22//! let source_arc: Arc<str> = Arc::from(source);
23//! let (program, errors) = parse(lex_result.tokens(), source_arc);
24//!
25//! assert!(errors.is_empty());
26//! assert!(program.is_some());
27//! ```
28
29#![forbid(unsafe_code)]
30
31// Lexer modules
32mod lexer;
33mod token;
34
35// Parser modules
36pub mod ast;
37mod parser;
38pub mod span;
39mod ty;
40
41// Lexer exports
42pub use lexer::{lex, lex_partial, LexError, LexErrorLocation, LexResult, Spanned};
43pub use token::Token;
44
45// Re-export logos for downstream use
46pub use logos::Logos;
47
48// Parser exports
49pub use ast::*;
50pub use parser::{parse, ParseError};
51pub use span::{Ident, Span};
52pub use ty::TypeExpr;