#php #parser #php-parser #php-ast #php-parser-rs

bin+lib pxp-parser

A handwritten, recursive-descent parser for the PXP superset

1 unstable release

0.0.0-b4 May 11, 2023

#24 in #php

MIT/Apache

540KB
14K SLoC

PHP-Parser

A handwritten fault-tolerant, recursive-descent parser for PXP (the PHP superset) written in Rust.

Warning - this is still alpha software and the public API is still subject to change. Please use at your own risk.


Usage

Add pxp-parser in your Cargo.toml's dependencies section

[dependencies]
pxp-parser = { git = "https://github.com/php-rust-tools/pxp-parser" }

or use cargo add

cargo add pxp-parser --git https://github.com/php-rust-tools/pxp-parser

Extensions

To learn more about the extended syntax that the PXP parser supports, please visit the official website.

Example

use std::io::Result;

use pxp_parser::parser;

const CODE: &str = r#"<?php

final class User {
    public function __construct(
        public readonly string $name,
        public readonly string $email,
        public readonly string $password,
    ) {
    }
}
"#;

fn main() -> Result<()> {
    match parser::parse(CODE) {
        Ok(ast) => {
            println!("{:#?}", ast);
        }
        Err(err) => {
            println!("{}", err.report(CODE, None, true, false)?);

            println!("parsed so far: {:#?}", err.partial);
        }
    }

    Ok(())
}

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Credits

Dependencies

~2–3MB
~57K SLoC