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
}
  1. 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
}
  1. 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
}
  1. 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!