# A grammar file for reading BNF notation [id]: a-zA-Z-_+*@ [notbracket]: ^[] [notnewline]: ^\n\r -- BNF: predicate_section "--\n" rules_section BNF: rules_section BNF: spaces: space spaces spaces: space space: " " space: "\t" empty: spaces empty empty: "\n" empty "\n" empty: "\r" empty "\n" empty: "#" notnewlines "\n" empty: notnewlines: [notnewline] notnewlines notnewlines: predicate_section: predicate empty "\n" predicate_section predicate_section: predicate: "[" ids "]:" spaces class ids: [id] ids ids: # Yes, a class specification can be empty, in which case the predicate # is equivalent with the default "any" predicate. class: positive_class class: "^" positive_class positive_class: positive_specification positive_class positive_class: positive_specification: enotnewline positive_specification: enotnewline "-" enotnewline # Extended not-newline, or escaped not-newline enotnewline: [notnewline] enotnewline: "\\" [any] rules_section: rule empty "\n" rules_section rule: rule_name ":" spaces rule_rhs rule: rule_name ":" rule_rhs rule_name: [notbracket] rule_name rule_name: spaces-or-escaped-newline: spaces spaces-or-escaped-newline: "\\\n" rule_rhs: ids spaces-or-escaped-newline rule_rhs rule_rhs: