The Parse Tree Structure

N -> <name>      // Macro names eg horn_1_part coda

I -> <integer>   // signed integers for note numbers and accidentals

K -> <number>    // K numbers are scaled ddd.ddd
                 // eg 123.456  234  -0.123  -5
 
<note> -> I      // MIDI number of natural note

<accidentals> -> I  // -2 .. +2  -- double flat to double sharp

<len> -> K // 1, 2, 4, 8, etc for breve, minim, crochet etc

<code> -> I    // 1, 2, 3, etc code for clef for treble, alto, tenor etc

<mode> -> I    // 0 or 1  major or minor

L -> <line number>     // Line and file number

- -> E                 // Link to next item

E -> 0                            // End of list
  |  [Def - L N E]                // eg def abc = { a8 b, cis'}
  |  [Name - L N]                 // eg abc -- expand a macro name
  |  [Note - L <note> <accs> <len> <dots>]
                                  // eg fis'8.
  |  [Rest - L <len> <dots>]      // eg r4
  |  [Space - L <len> <dots>]     // eg s2.
  |  [Barline - L]                // eg | -- to help debugging
  |  [Tie - L E]                  // eg a8~
  |  [Comp E L E E]               // eg E vol{...}
  |  [Transpose - L <note> <accs> <note> <accs>]
                                  // eg transpose(c f)
  |  [Transposition - L <note> <accs>]
                                  // eg transposition(f)
  |  [Vol - L E]                  // eg vol {65 78 90 90}
  |  [Voladj - L E]               // eg voladj {.8 .9 .6 .2}
  |  [Tune - L E]                 // eg tune {440 442 440}
  |  [Tuneadj - L E]              // eg tuneadj {0 .4 0 -.4 0}
  |  [Tempo - L E]                // eg tempo {0:120 1:150 8:160}
  |  [Tempoadj - L E]             // eg tempoadj {0 .2 .3 .1 0}
  |  [Par - L E E]                // eg E || E
                                  // or << E .. E >>
  |  [Scale - L I I E]            // eg scale(3 2){a8 b cis}
                                  // ie 3 notes in the time for 2
  |  [Time - L I I]               // eg time(3 4)
  |  [Key - L <rawnum> <accs> <mode>]
                                  // eg key(bes major)
  |  [Clef - L <code>]            // eg clef(treble)
  |  [Rep - L I E]                // eg rep(5) E
  |  [Instrumentname - L S]       // eg instrumentname("frenchhorn")
  |  [Instrument - L I]           // eg instrument(frenchhorn)
  |  [Block - L E]                // eg { ... }
  |  [Num - L K]                  // eg 120.5
  |  [Numpair - L K K]            // eg 50:96

P -> 0
  |  [Def P L N E]                // eg def abc = { a8 b, cis'}
  |  [Score P L E]                // E is the entire score, once only
