(grammar (start document))
(extra (class plain (char %20) (char %09)))
(extra (seq (optional (literal %0D)) (literal %0A)))
(rule document normal (seq (repeat0 (seq (optional (alias blank_space (immediateToken (repeat1 (class plain (char %20) (char %09)))))) (alias newline (immediateToken (seq (optional (literal %0D)) (literal %0A)))))) (not (seq (optional (alias blank_space (immediateToken (repeat1 (class plain (char %20) (char %09)))))) (alias newline (immediateToken (seq (optional (literal %0D)) (literal %0A)))))) (repeat0 (choice unordered (ref setting) (ref comment))) (repeat0 (seq (ref section) (repeat0 (ref comment))))) (concept grammar.document))
(rule section normal (seq (ref section_name) (repeat0 (seq (repeat0 (ref comment)) (ref setting)))) (concept grammar.ini.section))
(rule section_name normal (seq (literal %5B) (alias text (immediateToken (repeat1 (class negated (char %5B) (char %5D))))) (literal %5D) (choice ordered (alias newline (immediateToken (seq (repeat0 (class plain (char %20) (char %09))) (seq (optional (literal %0D)) (literal %0A))))) (seq (optional (alias blank_space (immediateToken (repeat1 (class plain (char %20) (char %09)))))) (not (immediateToken any))))) (concept grammar.ini.section-name))
(rule setting normal (seq (alias setting_name (token (seq (class negated (char %3B) (char %23) (char %3D) (char %5B) (char %20) (char %09) (char %0A) (char %0D) (char %0B) (char %0C)) (repeat0 (seq (repeat0 (literal %20)) (class negated (char %3B) (char %23) (char %3D) (char %5B) (char %20) (char %09) (char %0A) (char %0D) (char %0B) (char %0C))))))) (literal %3D) (optional (alias setting_value (immediateToken (repeat1 (class negated (char %0A)))))) (choice ordered (alias newline (immediateToken (seq (optional (literal %0D)) (literal %0A)))) (not (immediateToken any)))) (concept grammar.ini.setting))
(rule comment normal (seq (alias comment_marker (token (class plain (char %3B) (char %23)))) (alias text (immediateToken (repeat0 (class negated (char %0D) (char %0A))))) (choice ordered (alias newline (immediateToken (seq (optional (literal %0D)) (literal %0A)))) (not (immediateToken any)))) (concept grammar.comment))