3 releases
0.0.1 | Jan 20, 2025 |
---|---|
0.0.0 | Mar 27, 2024 |
0.0.0-prealpha0 | May 3, 2024 |
#42 in #early
112 downloads per month
16KB
Derive macros implemented with [pest3_generator].
Code Generation
Meta Rules
Rules can have several arguments.
Definitions of these rules can use these arguments, and these rules will be mapped to a struct in Rust using generics.
use pest3_derive::Parser;
use pest3_core::typed::TypedNode;
#[derive(Parser)]
#[grammar_inline = r#"
pair(a, b) = a - " "* - ":" - " "* - b
string = "\"" - ('a'..'z' | 'A'..'Z' | '0'..'9')* - "\""
main = pair(string, string)
"#]
struct Parser;
fn main() -> anyhow::Result<()> {
use rules::*;
pair::<string, string>::check(r#""a": "b""#)?;
Ok(())
}
Once called with some exact parameters, these arguments are replaced directly as a whole.
In the example above,
pair(string, string)
has the same structure with
string - " "* - ":" - " "* - string
.
But there are some restrictions on meta rules:
- All arguments must be used. I think there is no reason in pest for one to define an argument that won't be used, at least for now.
And later we may support constant arguments
just like the built-in rule pest::stack::peek
.
Dependencies
~4.5MB
~88K SLoC