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;
37pub mod formatter;
38mod parser;
39pub mod span;
40mod ty;
41
42// Lexer exports
43pub use lexer::{lex, lex_partial, LexError, LexErrorLocation, LexResult, Spanned};
44pub use token::Token;
45
46// Re-export logos for downstream use
47pub use logos::Logos;
48
49// Parser exports
50pub use ast::*;
51pub use formatter::format;
52pub use parser::{parse, ParseError};
53pub use span::{Ident, Span};
54pub use ty::TypeExpr;