================================================================================
VALID - comment - basic
================================================================================

# This is a full-line comment
key = "value" # This is a comment at the end of a line

--------------------------------------------------------------------------------

(document
  (comment)
  (pair
    (bare_key)
    (string)
    (comment)))

================================================================================
VALID - key/value pair - basic
================================================================================

key = "value"

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (string)))

================================================================================
INVALID - key/value pair - empty value
================================================================================

key = # INVALID

--------------------------------------------------------------------------------

(document
  (ERROR
    (bare_key)
    (comment)))

================================================================================
INVALID - key/value pair - no newline between pairs
================================================================================

first = "Tom" last = "Preston-Werner" # INVALID

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (string)
    (MISSING _line_ending_or_eof))
  (pair
    (bare_key)
    (string)
    (comment)))

================================================================================
VALID - keys - bare keys
================================================================================

key = "value"
bare_key = "value"
bare-key = "value"
1234 = "value"

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (string))
  (pair
    (bare_key)
    (string))
  (pair
    (bare_key)
    (string))
  (pair
    (bare_key)
    (string)))

================================================================================
VALID - keys - quoted keys
================================================================================

"127.0.0.1" = "value"
"character encoding" = "value"
"ʎǝʞ" = "value"
'key2' = "value"
'quoted "value"' = "value"

--------------------------------------------------------------------------------

(document
  (pair
    (quoted_key)
    (string))
  (pair
    (quoted_key)
    (string))
  (pair
    (quoted_key)
    (string))
  (pair
    (quoted_key)
    (string))
  (pair
    (quoted_key)
    (string)))

================================================================================
INVALID - keys - empty bare key
================================================================================

= "no key name"  # INVALID
"" = "blank"     # VALID but discouraged
'' = 'blank'     # VALID but discouraged

--------------------------------------------------------------------------------

(document
  (ERROR)
  (pair
    (quoted_key)
    (comment)
    (ERROR)
    (string)
    (comment))
  (pair
    (quoted_key)
    (string)
    (comment)))

================================================================================
VALID - keys - dotted keys
================================================================================

name = "Orange"
physical.color = "orange"
physical.shape = "round"
site."google.com" = true

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (string))
  (pair
    (dotted_key
      (bare_key)
      (bare_key))
    (string))
  (pair
    (dotted_key
      (bare_key)
      (bare_key))
    (string))
  (pair
    (dotted_key
      (bare_key)
      (quoted_key))
    (boolean)))

================================================================================
VALID - keys - duplicate keys (semantically INVALID)
================================================================================

# DO NOT DO THIS
name = "Tom"
name = "Pradyun"

--------------------------------------------------------------------------------

(document
  (comment)
  (pair
    (bare_key)
    (string))
  (pair
    (bare_key)
    (string)))

================================================================================
VALID - keys - directly defined nested keys
================================================================================

# This makes the key "fruit" into a table.
fruit.apple.smooth = true

# So then you can add to the table "fruit" like so:
fruit.orange = 2

--------------------------------------------------------------------------------

(document
  (comment)
  (pair
    (dotted_key
      (dotted_key
        (bare_key)
        (bare_key))
      (bare_key))
    (boolean))
  (comment)
  (pair
    (dotted_key
      (bare_key)
      (bare_key))
    (integer)))

================================================================================
VALID - keys - overlapped keys (semantically INVALID)
================================================================================

# THE FOLLOWING IS INVALID

# This defines the value of fruit.apple to be an integer.
fruit.apple = 1

# But then this treats fruit.apple like it's a table.
# You can't turn an integer into a table.
fruit.apple.smooth = true

--------------------------------------------------------------------------------

(document
  (comment)
  (comment)
  (pair
    (dotted_key
      (bare_key)
      (bare_key))
    (integer))
  (comment)
  (comment)
  (pair
    (dotted_key
      (dotted_key
        (bare_key)
        (bare_key))
      (bare_key))
    (boolean)))

================================================================================
VALID - keys - order
================================================================================

# VALID BUT DISCOURAGED

apple.type = "fruit"
orange.type = "fruit"

apple.skin = "thin"
orange.skin = "thick"

apple.color = "red"
orange.color = "orange"

# RECOMMENDED

apple.type = "fruit"
apple.skin = "thin"
apple.color = "red"

orange.type = "fruit"
orange.skin = "thick"
orange.color = "orange"

--------------------------------------------------------------------------------

(document
  (comment)
  (pair
    (dotted_key
      (bare_key)
      (bare_key))
    (string))
  (pair
    (dotted_key
      (bare_key)
      (bare_key))
    (string))
  (pair
    (dotted_key
      (bare_key)
      (bare_key))
    (string))
  (pair
    (dotted_key
      (bare_key)
      (bare_key))
    (string))
  (pair
    (dotted_key
      (bare_key)
      (bare_key))
    (string))
  (pair
    (dotted_key
      (bare_key)
      (bare_key))
    (string))
  (comment)
  (pair
    (dotted_key
      (bare_key)
      (bare_key))
    (string))
  (pair
    (dotted_key
      (bare_key)
      (bare_key))
    (string))
  (pair
    (dotted_key
      (bare_key)
      (bare_key))
    (string))
  (pair
    (dotted_key
      (bare_key)
      (bare_key))
    (string))
  (pair
    (dotted_key
      (bare_key)
      (bare_key))
    (string))
  (pair
    (dotted_key
      (bare_key)
      (bare_key))
    (string)))

================================================================================
VALID - string - basic strings
================================================================================

str = "I'm a string. \"You can quote me\". Name\tJos\u00E9\nLocation\tSF."

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (string
      (escape_sequence)
      (escape_sequence)
      (escape_sequence)
      (escape_sequence)
      (escape_sequence)
      (escape_sequence))))

================================================================================
VALID - string - multi-line basic strings
================================================================================

str1 = """
Roses are red
Violets are blue"""

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (string)))

================================================================================
VALID - string - multi-line basic strings with trailing backslashes
================================================================================

# The following strings are byte-for-byte equivalent:
str1 = "The quick brown fox jumps over the lazy dog."

str2 = """
The quick brown \


  fox jumps over \
    the lazy dog."""

str3 = """\
       The quick brown \
       fox jumps over \
       the lazy dog.\
       """

--------------------------------------------------------------------------------

(document
  (comment)
  (pair
    (bare_key)
    (string))
  (pair
    (bare_key)
    (string
      (escape_sequence)
      (escape_sequence)))
  (pair
    (bare_key)
    (string
      (escape_sequence)
      (escape_sequence)
      (escape_sequence)
      (escape_sequence))))

================================================================================
VALID - string - multi-line basic strings with double quotes
================================================================================

str4 = """Here are two quotation marks: "". Simple enough."""
# str5 = """Here are three quotation marks: """."""  # INVALID
str5 = """Here are three quotation marks: ""\"."""
str6 = """Here are fifteen quotation marks: ""\"""\"""\"""\"""\"."""

# "This," she said, "is just a pointless statement."
str7 = """"This," she said, "is just a pointless statement.""""

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (string))
  (comment)
  (pair
    (bare_key)
    (string
      (escape_sequence)))
  (pair
    (bare_key)
    (string
      (escape_sequence)
      (escape_sequence)
      (escape_sequence)
      (escape_sequence)
      (escape_sequence)))
  (comment)
  (pair
    (bare_key)
    (string)))

================================================================================
VALID - string - literal strings
================================================================================

# What you see is what you get.
winpath  = 'C:\Users\nodejs\templates'
winpath2 = '\\ServerX\admin$\system32\'
quoted   = 'Tom "Dubs" Preston-Werner'
regex    = '<\i\c*\s*>'

--------------------------------------------------------------------------------

(document
  (comment)
  (pair
    (bare_key)
    (string))
  (pair
    (bare_key)
    (string))
  (pair
    (bare_key)
    (string))
  (pair
    (bare_key)
    (string)))

================================================================================
VALID - string - multi-line literal strings
================================================================================

regex2 = '''I [dw]on't need \d{2} apples'''
lines  = '''
The first newline is
trimmed in raw strings.
   All other whitespace
   is preserved.
'''

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (string))
  (pair
    (bare_key)
    (string)))

================================================================================
VALID - string - multi-line literal strings with single quotes
================================================================================

quot15 = '''Here are fifteen quotation marks: """""""""""""""'''

# apos15 = '''Here are fifteen apostrophes: ''''''''''''''''''  # INVALID
apos15 = "Here are fifteen apostrophes: '''''''''''''''"

# 'That's still pointless', she said.
str = ''''That's still pointless', she said.'''

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (string))
  (comment)
  (pair
    (bare_key)
    (string))
  (comment)
  (pair
    (bare_key)
    (string)))

================================================================================
VALID - integer - signed/unsigned decimal integer
================================================================================

int1 = +99
int2 = 42
int3 = 0
int4 = -17

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (integer))
  (pair
    (bare_key)
    (integer))
  (pair
    (bare_key)
    (integer))
  (pair
    (bare_key)
    (integer)))

================================================================================
VALID - integer - decimal integer with underscores
================================================================================

int5 = 1_000
int6 = 5_349_221
int7 = 1_2_3_4_5     # VALID but discouraged

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (integer))
  (pair
    (bare_key)
    (integer))
  (pair
    (bare_key)
    (integer)
    (comment)))

================================================================================
VALID - integer - hexadecimal/octal/binary integer
================================================================================

# hexadecimal with prefix `0x`
hex1 = 0xDEADBEEF
hex2 = 0xdeadbeef
hex3 = 0xdead_beef

# octal with prefix `0o`
oct1 = 0o01234567
oct2 = 0o755 # useful for Unix file permissions

# binary with prefix `0b`
bin1 = 0b11010110

--------------------------------------------------------------------------------

(document
  (comment)
  (pair
    (bare_key)
    (integer))
  (pair
    (bare_key)
    (integer))
  (pair
    (bare_key)
    (integer))
  (comment)
  (pair
    (bare_key)
    (integer))
  (pair
    (bare_key)
    (integer)
    (comment))
  (comment)
  (pair
    (bare_key)
    (integer)))

================================================================================
VALID - float - float with fractional or exponent or both
================================================================================

# fractional
flt1 = +1.0
flt2 = 3.1415
flt3 = -0.01

# exponent
flt4 = 5e+22
flt5 = 1e06
flt6 = -2E-2

# both
flt7 = 6.626e-34

--------------------------------------------------------------------------------

(document
  (comment)
  (pair
    (bare_key)
    (float))
  (pair
    (bare_key)
    (float))
  (pair
    (bare_key)
    (float))
  (comment)
  (pair
    (bare_key)
    (float))
  (pair
    (bare_key)
    (float))
  (pair
    (bare_key)
    (float))
  (comment)
  (pair
    (bare_key)
    (float)))

================================================================================
VALID - float - float with underscores
================================================================================

flt8 = 224_617.445_991_228

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (float)))

================================================================================
VALID - float - special float values
================================================================================

# infinity
sf1 = inf  # positive infinity
sf2 = +inf # positive infinity
sf3 = -inf # negative infinity

# not a number
sf4 = nan  # actual sNaN/qNaN encoding is implementation specific
sf5 = +nan # same as `nan`
sf6 = -nan # valid, actual encoding is implementation specific

--------------------------------------------------------------------------------

(document
  (comment)
  (pair
    (bare_key)
    (float)
    (comment))
  (pair
    (bare_key)
    (float)
    (comment))
  (pair
    (bare_key)
    (float)
    (comment))
  (comment)
  (pair
    (bare_key)
    (float)
    (comment))
  (pair
    (bare_key)
    (float)
    (comment))
  (pair
    (bare_key)
    (float)
    (comment)))

================================================================================
VALID - boolean - basic
================================================================================

bool1 = true
bool2 = false

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (boolean))
  (pair
    (bare_key)
    (boolean)))

================================================================================
VALID - offset date time - basic
================================================================================

odt1 = 1979-05-27T07:32:00Z
odt2 = 1979-05-27T00:32:00-07:00
odt3 = 1979-05-27T00:32:00.999999-07:00

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (offset_date_time))
  (pair
    (bare_key)
    (offset_date_time))
  (pair
    (bare_key)
    (offset_date_time)))

================================================================================
VALID - offset date time - whitespace as delimiter
================================================================================

odt4 = 1979-05-27 07:32:00Z

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (offset_date_time)))

================================================================================
VALID - local date time - basic
================================================================================

ldt1 = 1979-05-27T07:32:00
ldt2 = 1979-05-27T00:32:00.999999

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (local_date_time))
  (pair
    (bare_key)
    (local_date_time)))

================================================================================
VALID - local date - basic
================================================================================

ld1 = 1979-05-27

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (local_date)))

================================================================================
VALID - local time - basic
================================================================================

lt1 = 07:32:00
lt2 = 00:32:00.999999

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (local_time))
  (pair
    (bare_key)
    (local_time)))

================================================================================
VALID - array - basic
================================================================================

integers = [ 1, 2, 3 ]
colors = [ "red", "yellow", "green" ]
nested_array_of_int = [ [ 1, 2 ], [3, 4, 5] ]
nested_mixed_array = [ [ 1, 2 ], ["a", "b", "c"] ]
string_array = [ "all", 'strings', """are the same""", '''type''' ]

# Mixed-type arrays are allowed
numbers = [ 0.1, 0.2, 0.5, 1, 2, 5 ]
contributors = [
  "Foo Bar <foo@example.com>",
  { name = "Baz Qux", email = "bazqux@example.com", url = "https://example.com/bazqux" }
]

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (array
      (integer)
      (integer)
      (integer)))
  (pair
    (bare_key)
    (array
      (string)
      (string)
      (string)))
  (pair
    (bare_key)
    (array
      (array
        (integer)
        (integer))
      (array
        (integer)
        (integer)
        (integer))))
  (pair
    (bare_key)
    (array
      (array
        (integer)
        (integer))
      (array
        (string)
        (string)
        (string))))
  (pair
    (bare_key)
    (array
      (string)
      (string)
      (string)
      (string)))
  (comment)
  (pair
    (bare_key)
    (array
      (float)
      (float)
      (float)
      (integer)
      (integer)
      (integer)))
  (pair
    (bare_key)
    (array
      (string)
      (inline_table
        (pair
          (bare_key)
          (string))
        (pair
          (bare_key)
          (string))
        (pair
          (bare_key)
          (string))))))

================================================================================
VALID - array - allow newlines
================================================================================

integers2 = [
  1, 2, 3
]

integers3 = [
  1,
  2, # this is ok
]

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (array
      (integer)
      (integer)
      (integer)))
  (pair
    (bare_key)
    (array
      (integer)
      (integer)
      (comment))))

================================================================================
VALID - table - header
================================================================================

[table]

--------------------------------------------------------------------------------

(document
  (table
    (bare_key)))

================================================================================
VALID - table - basic
================================================================================

[table-1]
key1 = "some string"
key2 = 123

[table-2]
key1 = "another string"
key2 = 456

--------------------------------------------------------------------------------

(document
  (table
    (bare_key)
    (pair
      (bare_key)
      (string))
    (pair
      (bare_key)
      (integer)))
  (table
    (bare_key)
    (pair
      (bare_key)
      (string))
    (pair
      (bare_key)
      (integer))))

================================================================================
VALID - table - header with dotted key
================================================================================

[dog."tater.man"]
type.name = "pug"

--------------------------------------------------------------------------------

(document
  (table
    (dotted_key
      (bare_key)
      (quoted_key))
    (pair
      (dotted_key
        (bare_key)
        (bare_key))
      (string))))

================================================================================
VALID - table- header with whitespaces
================================================================================

[a.b.c]            # this is best practice
[ d.e.f ]          # same as [d.e.f]
[ g .  h  . i ]    # same as [g.h.i]
[ j . "ʞ" . 'l' ]  # same as [j."ʞ".'l']

--------------------------------------------------------------------------------

(document
  (table
    (dotted_key
      (dotted_key
        (bare_key)
        (bare_key))
      (bare_key))
    (comment))
  (table
    (dotted_key
      (dotted_key
        (bare_key)
        (bare_key))
      (bare_key))
    (comment))
  (table
    (dotted_key
      (dotted_key
        (bare_key)
        (bare_key))
      (bare_key))
    (comment))
  (table
    (dotted_key
      (dotted_key
        (bare_key)
        (quoted_key))
      (quoted_key))
    (comment)))

================================================================================
VALID - table - directly defined nested header key
================================================================================

# [x] you
# [x.y] don't
# [x.y.z] need these
[x.y.z.w] # for this to work

[x] # defining a super-table afterwards is ok

--------------------------------------------------------------------------------

(document
  (comment)
  (comment)
  (comment)
  (table
    (dotted_key
      (dotted_key
        (dotted_key
          (bare_key)
          (bare_key))
        (bare_key))
      (bare_key))
    (comment))
  (table
    (bare_key)
    (comment)))

================================================================================
VALID - table - duplicate header key (semantically INVALID)
================================================================================

# DO NOT DO THIS

[fruit]
apple = "red"

[fruit]
orange = "orange"

--------------------------------------------------------------------------------

(document
  (comment)
  (table
    (bare_key)
    (pair
      (bare_key)
      (string)))
  (table
    (bare_key)
    (pair
      (bare_key)
      (string))))

================================================================================
VALID - table - overlapped header key (semantically INVALID)
================================================================================

# DO NOT DO THIS EITHER

[fruit]
apple = "red"

[fruit.apple]
texture = "smooth"

--------------------------------------------------------------------------------

(document
  (comment)
  (table
    (bare_key)
    (pair
      (bare_key)
      (string)))
  (table
    (dotted_key
      (bare_key)
      (bare_key))
    (pair
      (bare_key)
      (string))))

================================================================================
VALID - table - order
================================================================================

# VALID BUT DISCOURAGED
[fruit.apple]
[animal]
[fruit.orange]

# RECOMMENDED
[fruit.apple]
[fruit.orange]
[animal]

--------------------------------------------------------------------------------

(document
  (comment)
  (table
    (dotted_key
      (bare_key)
      (bare_key)))
  (table
    (bare_key))
  (table
    (dotted_key
      (bare_key)
      (bare_key))
    (comment))
  (table
    (dotted_key
      (bare_key)
      (bare_key)))
  (table
    (dotted_key
      (bare_key)
      (bare_key)))
  (table
    (bare_key)))

================================================================================
VALID - table - sub-table
================================================================================

[fruit]
apple.color = "red"
apple.taste.sweet = true

# [fruit.apple]  # INVALID
# [fruit.apple.taste]  # INVALID

[fruit.apple.texture]  # you can add sub-tables
smooth = true

--------------------------------------------------------------------------------

(document
  (table
    (bare_key)
    (pair
      (dotted_key
        (bare_key)
        (bare_key))
      (string))
    (pair
      (dotted_key
        (dotted_key
          (bare_key)
          (bare_key))
        (bare_key))
      (boolean))
    (comment)
    (comment))
  (table
    (dotted_key
      (dotted_key
        (bare_key)
        (bare_key))
      (bare_key))
    (comment)
    (pair
      (bare_key)
      (boolean))))

================================================================================
VALID - inline table - basic
================================================================================

name = { first = "Tom", last = "Preston-Werner" }
point = { x = 1, y = 2 }
animal = { type.name = "pug" }

--------------------------------------------------------------------------------

(document
  (pair
    (bare_key)
    (inline_table
      (pair
        (bare_key)
        (string))
      (pair
        (bare_key)
        (string))))
  (pair
    (bare_key)
    (inline_table
      (pair
        (bare_key)
        (integer))
      (pair
        (bare_key)
        (integer))))
  (pair
    (bare_key)
    (inline_table
      (pair
        (dotted_key
          (bare_key)
          (bare_key))
        (string)))))

================================================================================
VALID - inline table - overlapped key (semantically INVALID)
================================================================================

[product]
type = { name = "Nail" }
# type.edible = false  # INVALID

[product]
type.name = "Nail"
# type = { edible = false }  # INVALID

--------------------------------------------------------------------------------

(document
  (table
    (bare_key)
    (pair
      (bare_key)
      (inline_table
        (pair
          (bare_key)
          (string))))
    (comment))
  (table
    (bare_key)
    (pair
      (dotted_key
        (bare_key)
        (bare_key))
      (string))
    (comment)))

================================================================================
VALID - array of tables - basic
================================================================================

[[products]]
name = "Hammer"
sku = 738594937

[[products]]

[[products]]
name = "Nail"
sku = 284758393

color = "gray"

--------------------------------------------------------------------------------

(document
  (table_array_element
    (bare_key)
    (pair
      (bare_key)
      (string))
    (pair
      (bare_key)
      (integer)))
  (table_array_element
    (bare_key))
  (table_array_element
    (bare_key)
    (pair
      (bare_key)
      (string))
    (pair
      (bare_key)
      (integer))
    (pair
      (bare_key)
      (string))))

================================================================================
VALID - array of tables - nested arrays of tables
================================================================================

[[fruit]]
  name = "apple"

  [fruit.physical]  # subtable
    color = "red"
    shape = "round"

  [[fruit.variety]]  # nested array of tables
    name = "red delicious"

  [[fruit.variety]]
    name = "granny smith"

[[fruit]]
  name = "banana"

  [[fruit.variety]]
    name = "plantain"

--------------------------------------------------------------------------------

(document
  (table_array_element
    (bare_key)
    (pair
      (bare_key)
      (string)))
  (table
    (dotted_key
      (bare_key)
      (bare_key))
    (comment)
    (pair
      (bare_key)
      (string))
    (pair
      (bare_key)
      (string)))
  (table_array_element
    (dotted_key
      (bare_key)
      (bare_key))
    (comment)
    (pair
      (bare_key)
      (string)))
  (table_array_element
    (dotted_key
      (bare_key)
      (bare_key))
    (pair
      (bare_key)
      (string)))
  (table_array_element
    (bare_key)
    (pair
      (bare_key)
      (string)))
  (table_array_element
    (dotted_key
      (bare_key)
      (bare_key))
    (pair
      (bare_key)
      (string))))

================================================================================
VALID - array of tables - append to array in undefined table (semantically INVALID)
================================================================================

# INVALID TOML DOC
[fruit.physical]  # subtable, but to which parent element should it belong?
  color = "red"
  shape = "round"

[[fruit]]  # parser must throw an error upon discovering that "fruit" is
           # an array rather than a table
  name = "apple"

--------------------------------------------------------------------------------

(document
  (comment)
  (table
    (dotted_key
      (bare_key)
      (bare_key))
    (comment)
    (pair
      (bare_key)
      (string))
    (pair
      (bare_key)
      (string)))
  (table_array_element
    (bare_key)
    (comment)
    (comment)
    (pair
      (bare_key)
      (string))))

================================================================================
VALID - array of tables - append to statically defined array (semantically INVALID)
================================================================================

# INVALID TOML DOC
fruit = []

[[fruit]] # Not allowed

--------------------------------------------------------------------------------

(document
  (comment)
  (pair
    (bare_key)
    (array))
  (table_array_element
    (bare_key)
    (comment)))

================================================================================
VALID - array of tables - append to table (semantically INVALID)
================================================================================

# INVALID TOML DOC
[[fruit]]
  name = "apple"

  [[fruit.variety]]
    name = "red delicious"

  # INVALID: This table conflicts with the previous array of tables
  [fruit.variety]
    name = "granny smith"

  [fruit.physical]
    color = "red"
    shape = "round"

  # INVALID: This array of tables conflicts with the previous table
  [[fruit.physical]]
    color = "green"

--------------------------------------------------------------------------------

(document
  (comment)
  (table_array_element
    (bare_key)
    (pair
      (bare_key)
      (string)))
  (table_array_element
    (dotted_key
      (bare_key)
      (bare_key))
    (pair
      (bare_key)
      (string))
    (comment))
  (table
    (dotted_key
      (bare_key)
      (bare_key))
    (pair
      (bare_key)
      (string)))
  (table
    (dotted_key
      (bare_key)
      (bare_key))
    (pair
      (bare_key)
      (string))
    (pair
      (bare_key)
      (string))
    (comment))
  (table_array_element
    (dotted_key
      (bare_key)
      (bare_key))
    (pair
      (bare_key)
      (string))))
