12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- // Package ini is an LL(1) parser for configuration files.
- //
- // Example:
- // sections, err := ini.OpenFile("/path/to/file")
- // if err != nil {
- // panic(err)
- // }
- //
- // profile := "foo"
- // section, ok := sections.GetSection(profile)
- // if !ok {
- // fmt.Printf("section %q could not be found", profile)
- // }
- //
- // Below is the BNF that describes this parser
- //
- // Grammar:
- // stmt -> section | stmt'
- // stmt' -> epsilon | expr
- // expr -> value (stmt)* | equal_expr (stmt)*
- // equal_expr -> value ( ':' | '=' ) equal_expr'
- // equal_expr' -> number | string | quoted_string
- // quoted_string -> " quoted_string'
- // quoted_string' -> string quoted_string_end
- // quoted_string_end -> "
- //
- // section -> [ section'
- // section' -> section_value section_close
- // section_value -> number | string_subset | boolean | quoted_string_subset
- // quoted_string_subset -> " quoted_string_subset'
- // quoted_string_subset' -> string_subset quoted_string_end
- // quoted_string_subset -> "
- // section_close -> ]
- //
- // value -> number | string_subset | boolean
- // string -> ? UTF-8 Code-Points except '\n' (U+000A) and '\r\n' (U+000D U+000A) ?
- // string_subset -> ? Code-points excepted by <string> grammar except ':' (U+003A), '=' (U+003D), '[' (U+005B), and ']' (U+005D) ?
- //
- // SkipState will skip (NL WS)+
- //
- // comment -> # comment' | ; comment'
- // comment' -> epsilon | value
- package ini
|