EBNFGrammar[
{
(* blocks *)
"curly" :> Sequence["{", ___, "}"],
"paren" :> Sequence["(", ___, ")"],
"bracket" :> Sequence["[", ___, "]"],
"comment" :> Sequence["(*", ___, "*)"],
"stmt" :> Sequence[___, ";"],
(* strings *)
"str" :> Sequence["'", String, "'"],
"comm" :> Sequence["#", String, "\n"],
(* operators *)
{"assign", "Precedence" -> 0} :> Sequence[_, "+=" | "=", _],
{"comp", "Precedence" -> 1} :> Sequence[_, "<" | ">" | "<=" | ">=", _],
{"add", "Precedence" -> 2} :> Sequence[_, "+" | "-", _],