Macro mpc::parser
[−]
[src]
macro_rules! parser { (grammar: {$grammar:expr} filename: {$filename:expr} input: {$input:expr} main: $top:ident parsers: $($p:ident)+) => { ... }; (grammar: {$grammar:expr} filename: {$filename:expr} main: $top:ident parsers: $($p:ident)+) => { ... }; (grammar: {$grammar:expr} input: {$input:expr} main: $top:ident parsers: $($p:ident)+) => { ... }; (grammar: {$grammar:expr} main: $top:ident parsers: $($p:ident)+) => { ... }; }
Create a mpc_parser_t
using mpca_lang
grammars
Usage
There are four possible ways to use this macro. Each does a slightly different thing: 1. To make a parser and immediately run on provided input in the form of something stringy:
parser! { grammar:{g_string![ "word : /[a-zA-Z0-9]+/; \n" "punct: '.' | '!' | ',' | ';' | '?' | '-' | ':';\n" "sentence: <word>+ <punct>; \n" "paragraph: <sentence>+; \n" ]} filename: {"myfilename.txt"} input: { "A big brown piece of DOG jumped over something.".to_string() + "Bananas are awesome. What do you mean, potato?"} main: paragraph parsers: word punct sentence }
- To do the same, but automatically read the file:
parser! { grammar:{g_string![ "word : /[a-zA-Z0-9]+/; \n" "punct: '.' | '!' | ',' | ';' | '?' | '-' | ':';\n" "sentence: <word>+ <punct>; \n" "paragraph: <sentence>+; \n" ]} filename: {"myfilename.txt"} main: paragraph parsers: word punct sentence }
- Parse input without a filename:
parser! { grammar:{g_string![ "word : /[a-zA-Z0-9]+/; \n" "punct: '.' | '!' | ',' | ';' | '?' | '-' | ':';\n" "sentence: <word>+ <punct>; \n" "paragraph: <sentence>+; \n" ]} input: { "A big brown piece of DOG jumped over something.".to_string() + "Bananas are awesome. What do you mean, potato?"} main: paragraph parsers: word punct sentence }
- Prepare parsers for later use:
parser! { grammar:{g_string![ "word : /[a-zA-Z0-9]+/; \n" "punct: '.' | '!' | ',' | ';' | '?' | '-' | ':';\n" "sentence: <word>+ <punct>; \n" "paragraph: <sentence>+; \n" ]} main: paragraph parsers: word punct sentence }
For cases 1-3 parser!
returns Result<*mut mpc_ast_t, *mut mpc_err_t>
In case 4 parser!
returns a vector containing prepared parsers. The vector
is not to be touched by a programmer. Its sole purpose is to be passed to
run_parser!