A first pass at subparsers (whitespace ignoring).
[gazelle.git] / sketches / rtn.gzl
blob4831d15aa59a57a50e665c9d25d34d3c77d2c6aa
2 ident: /[b-zA-Z]+/;
3 whitespace: /[\r\n\s\t]+/;
5 grammar     -> statement*;
6 statement   -> .nonterm=ident "->" derivations ";" | "@ignore" ident "in" ident +(,) ";";
7 derivations -> derivation +("|");
8 derivation  -> term+;
9 single_term -> regex | string | .nonterm=ident;
10 term        -> ( "." .name=ident "=" )? (regex | string | .nonterm=ident ) modifier ? ;
11 modifier    -> "?" | "*" | "+" |
12                 ("*" | "+") "(" single_term ")";
13 string      -> '"' .dquote_str_body=/([^"\\]|\\.)*/ '"' |
14                "'" .squote_str_body=/([^'\\]|\\.)*/ "'";
15 regex       -> "/" .regex_body=/([^\/\\]|\\.)*/ "/";
17 @ignore whitespace in grammar, statement, derivations, derivation, term;
18 @start grammar;