perl_parser_pest/lib.rs
1//! Legacy Pest-based Perl parser (v2).
2//!
3//! This crate provides a pure Rust Perl parser built with the Pest parser generator.
4//! It outputs tree-sitter compatible S-expressions and requires no C dependencies.
5//!
6//! **Note:** This is maintained as a learning tool and historical reference.
7//! For production parsing and LSP, use `perl-parser` (v3).
8
9//!
10//! # Example
11//!
12//! ```ignore
13//! use perl_parser_pest::PureRustPerlParser;
14//!
15//! let mut parser = PureRustPerlParser::new();
16//! let code = r#"
17//! sub hello {
18//! my $name = shift;
19//! print "Hello, $name!\n";
20//! }
21//! "#;
22//!
23//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
24//! let ast = parser.parse(code)?;
25//! # Ok(())
26//! # }
27//! let sexp = parser.to_sexp(&ast);
28//! println!("{}", sexp);
29//! ```
30//!
31//! # Architecture
32//!
33//! The parser uses a three-stage pipeline:
34//! 1. **Pest Parsing**: PEG grammar processes input into parse tree
35//! 2. **AST Building**: Type-safe AST construction with position tracking
36//! 3. **S-Expression Output**: Tree-sitter compatible format generation
37
38pub mod error;
39pub mod pratt_parser;
40pub mod pure_rust_parser;
41pub mod sexp_formatter;
42
43// Re-export the main types for convenience
44pub use error::{ParseError, ParseResult};
45pub use pratt_parser::PrattParser;
46pub use pure_rust_parser::{AstNode, PerlParser, PureRustPerlParser};
47pub use sexp_formatter::SexpFormatter;