1pub mod diagnostics;
2pub(crate) mod expr;
3pub mod instrument;
4pub(crate) mod interpolation;
5pub(crate) mod parser;
6pub(crate) mod precedence;
7pub(crate) mod stmt;
8pub mod version;
9
10use diagnostics::ParseError;
11use php_ast::Program;
12pub use version::PhpVersion;
13
14pub struct ParseResult<'arena, 'src> {
15 pub program: Program<'arena, 'src>,
16 pub errors: Vec<ParseError>,
17}
18
19pub fn parse<'arena, 'src>(
20 arena: &'arena bumpalo::Bump,
21 source: &'src str,
22) -> ParseResult<'arena, 'src> {
23 let mut parser = parser::Parser::new(arena, source);
24 let program = parser.parse_program();
25 ParseResult {
26 program,
27 errors: parser.into_errors(),
28 }
29}
30
31pub fn parse_versioned<'arena, 'src>(
37 arena: &'arena bumpalo::Bump,
38 source: &'src str,
39 version: PhpVersion,
40) -> ParseResult<'arena, 'src> {
41 let mut parser = parser::Parser::with_version(arena, source, version);
42 let program = parser.parse_program();
43 ParseResult {
44 program,
45 errors: parser.into_errors(),
46 }
47}