I'm going to take the liberty of reposting my suggestion for chord syntax,
since it seems to have got rather lost amid discussions on MUSE's, abc2midi;s
and the draft standard.
Hey, Rocky - watch me pull a formal grammer out of this hat!
Note
* = zero or more of...
[] = optional
'' = literal string
.. = range of numbers
<abcchord> :== '"'<symbol>'"'
<symbol> :== <chord>|<bassnote>
<bassnote> :== <singlenoteletter>[<accidental>]
<singlenoteletter> :== 'a'|'b'|'c'|'d'|'e'|'f'|'g'
<accidental> :== '#'|'b'
<chord> :== <note><type>[<modifierlist>]['/'<note>]
<note> :== <noteletter>[<accidental>]
<noteletter> :== 'A'|'B'|'C'|'D'|'E'|'F'|'G'
<type> :== <nothing>|'m'|'dim'|'aug'
<nothing> :== ''
<modifierlist> :== <complexmod>*
<complexmod> :== <modifier>|(<modifier>)
<modifier> :== <suspension>|<omission>|<addition>|<extension>
<suspension> :== 'sus2'|'sus4'
<omission> := '5'|'no'<degree>
<degree> :== '2'..'13'
<addition> :== 'add'<altereddegree>
<altereddegree :== [<accidental>]<degree>
<extension> :== '6'|<complexext>
<complexext> :== <alteredext1>|<alteredext2>
<alteredext1> :== ['maj']<ext7th>[<alterationlist>]
<alteredext1> :== ['maj']<accidental><ext7th>
<ext7th> :== '7'|'9'|'11'|'13'
<alterationlist> :== <alteration>*
<alteration> :== <accidental><degree>
NB
noX remove degree X from the chord (e.g, C7(no3)
5 same as 'no3'
6 add 6th
[maj]7 add b7th (7th if 'maj')
[maj]9 add b7th (7th if 'maj') + 9th
[maj]11 add b7th (7th if 'maj') + 9th + 11th
[maj]13 add b7th (7th if 'maj') + 9th + 11th + 13th
[add]X add the Xth note of the scale
sus2 drop the 3rd to the second
sus4 raise the 3rd to the fourth
<accidental>X apply the accidental to the X degree
--
Mike Whitaker | Work: +44 1733 766619 | Work: [EMAIL PROTECTED]
System Architext | Fax: +44 1733 348287 | Home: [EMAIL PROTECTED]
CricInfo Ltd | GSM: +44 7971 977375 | Web: http://www.cricinfo.com/
To subscribe/unsubscribe, point your browser to: http://www.tullochgorm.com/lists.html