# grammar grammar ## terminals ANY =| . ; SPACE =| ' '; TAB =| '\t'; RETURN =| '\r'; NEWLINE =| '\n'; SEMICOLON =| ';'; EQUAL =| '='; PIPE =| '|'; EXCLAMATION =| '!'; QUESTION =| '?'; PLUS =| '+'; STAR =| '*'; APOSTROPHE =| '\''; BACKSLASH =| '\\'; DOT =| '.'; ## rules start =| _ rule* ; _ = | SPACE | TAB | RETURN | NEWLINE | comment ; comment =| SEMICOLON (!NEWLINE ANY)* NEWLINE ; # XXX rule =| id EQUAL option* SEMICOLON ; id =| alpha alphanum* ; alpha = |'_' |'a'|'b'|'c'|'d'|'e'|'f'|'g'|'h'|'i'|'j'|'k'|'l'|'m' |'n'|'o'|'p'|'q'|'r'|'s'|'t'|'u'|'v'|'w'|'x'|'y'|'z' |'A'|'B'|'C'|'D'|'E'|'F'|'G'|'H'|'I'|'J'|'K'|'L'|'M' |'N'|'O'|'P'|'Q'|'R'|'S'|'T'|'U'|'V'|'W'|'X'|'Y'|'Z' ; alphanum = | alpha | numeric ; numeric = |'0'|'1'|'2'|'3'|'4' |'5'|'6'|'7'|'8'|'9' ; option =| PIPE expr* ; expr = | id | EXCLAMATION id | id QUESTION | id PLUS | id STAR | term ; term = # TODO review specifics of the exclamation usage # basically, charset filters | APOSTROPHE !BACKSLASH !APOSTROPHE ANY APOSTROPHE | APOSTROPHE BACKSLASH ANY APOSTROPHE | DOT | byte ; byte =| '0' 'x' hex hex ; hex = | numeric |'a'|'b'|'c'|'d'|'e'|'f' |'A'|'B'|'C'|'D'|'E'|'F' ;