コード (chord のほう) のパーサを書いてみると、自然言語の文法を構築する難しさをほんの少しだけ体感できる。想定はしていたがやはり無自覚だった例外がかなりある。自分がどういう規則に従って読んでいるのか分からない。これは本当に例外なのか? もっとよい文法 (というか意味論) があるのか? 延々と悩んでいる。
厄介なパターンはごちゃごちゃしていて書き出す気にもなれないが、自分自身が誤解していた表記として Csus9 がある。これは Csus2 でも C9sus4 でも Csus4(9) でもなく、 C7sus2 と等価らしい。 Csus9 = C7(9, no3), Csus11 = C7(9, 11, no3), Csus13 = C7(9, 11, 13, no3) である。ただし Csus7 = C7(11, no3) で、構成音に suspended された先がなければ sus4 の省略形であると考える。構文的に sus は add と同じ位置にも、 min, dim などと同じ位置にもくる。
あと、「絶対こんな書き方しないけれど、弾くのも逆に面倒」というパターンがけっこうある。 C6(b13) は C(b13) なのか C(#5, 13) なのか。