title: Can I improve this GOLD Parser Grammar?
body: <p>I have to parse a file that looks like this:</p>
  
  <pre><code>versioninfo
  {
      "editorversion" "400"
      "editorbuild" "4715"
  }
  visgroups
  {
  }
  world
  {
      "id" "1"
      "mapversion" "525"
      "classname" "worldspawn"
      solid
      {
          "id" "2"
          side
          {
              "id" "1"
              "plane" "(-544 -400 0) (-544 -240 0) (-272 -240 0)"
          }
          side
          {
              "id" "2"
              "plane" "(-544 -240 -16) (-544 -400 -16) (-272 -400 -16)"
          }
      }
  }
  </code></pre>
  
  <p>I have a parser written from scratch, but it has a few bugs that I can't track down and I imagine it'll be difficult to maintain if the format changes in the future. I decided to use the GOLD Parsing System to generate a parser, instead. My grammar looks like this:</p>
  
  <pre><code>"Start Symbol" = &lt;SectionList&gt;
  
  ! SETS
  
  {Section Chars} = {AlphaNumeric} + [_]
  {Property Chars} = {Printable} - ["]
  
  ! TERMINALS
  
  SectionName = {Section Chars}+ 
  PropertyPart = '"' {Property Chars}* '"'
  
  ! RULES
  
  &lt;SectionList&gt; ::= &lt;Section&gt;
                 |  &lt;Section&gt; &lt;SectionList&gt;
  
  &lt;SectionBody&gt; ::= &lt;PropertyList&gt;
                 |  &lt;SectionList&gt;
                 |  &lt;PropertyList&gt; &lt;SectionList&gt;
  
  &lt;Section&gt; ::= SectionName '{' '}'
             |  SectionName '{' &lt;SectionBody&gt; '}'
  
  &lt;PropertyList&gt; ::= &lt;Property&gt;
                  |  &lt;Property&gt; &lt;PropertyList&gt;
  
  &lt;Property&gt; ::= PropertyPart PropertyPart
  </code></pre>
  
  <p>There are no errors and it parses my 2000-line test file just fine. However, this is my first time writing a custom grammar, so I'm not sure if I'm doing it correctly.</p>
  
  <p>Are there any improvements I could make to the grammar above?</p>