module Music
module Transcription module Parsing
grammar Pitch
include NonnegativeInteger rule pitch pitch_letter mod:[#b]? octave cents:cent? <PitchNode> end rule octave n:nonnegative_integer { def to_i; n.to_i; end } end rule cent [+-] n:nonnegative_integer { def to_i; text_value.to_i; end } end rule pitch_letter letter_a / letter_b / letter_c / letter_d / letter_e / letter_f / letter_g end rule letter_a [Aa] { def to_semitone; 9; end } end rule letter_b [Bb] { def to_semitone; 11; end } end rule letter_c [Cc] { def to_semitone; 0; end } end rule letter_d [Dd] { def to_semitone; 2; end } end rule letter_e [Ee] { def to_semitone; 4; end } end rule letter_f [Ff] { def to_semitone; 5; end } end rule letter_g [Gg] { def to_semitone; 7; end } end
end
end end end