using '[' and ']' instead of '<' and '>' in the web context.
TODO: setup change handlers for textarea
# grammar [grammar] =| [_] [assignments] ; [_] = # whitespace | ' ' [_] | '\t' [_] | '\n' [_] | '#' [comment] '\n' | # epsilon ; [comment] = | [printable] [comment] | [backslash] [comment] | ' ' [comment] | '\t' [comment] | # epsilon ; [assignments] = | [assignment] [assignments] | # epsilon ; [assignment] =| [identifier] '=' [_] [rules] ';' [_] ; [identifier] =| '[' [characters] ']' [_] ; [characters] = | [character] [characters] | [character] ; [character] = | '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' | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '_' ; [rules] = | [rules] '|' [_] [terms] | # epsilon ; [terms] = | [term] [terms] | # epsilon ; [term] = | [identifier] | ''' [literal] ''' [_] ; [literal] = | [printable] | [backslash] [escaped] ; [printable] = | [character] # TODO escape ( ampersand, less-than, greater-than ) | '`' | '~' | '!' | '@' | '#' | '$' | '%' | '^' | '&' | '*' | '(' | ')' | '_' | '+' | '-' | '=' | '[' | ']' | '{' | '}' | '|' | ';' | ''' | ':' | '"' | ',' | '.' | '/' | '<' | '>' | '?' ; [backslash] =| '\\' ; [escaped] = | '\\' # backslash | 'n' # newline | 't' # tab | 'r' # return ;