GrammarSpaceDelimitedChords,
GrammarDurationOrDurationSet,
GrammarSpaceDelimitedDurations,
- GrammarPaddedOperatorRepeat,
- GrammarPaddedOperatorRepeatEach,
+ GrammarMissingRepeatOperator,
GrammarPhrase2,
GrammarPhrase3,
GrammarPhrase4,
{Message::MessageID::GrammarSpaceDelimitedChords, "parse error: GrammarSpaceDelimitedChords"},
{Message::MessageID::GrammarDurationOrDurationSet, "parse error: GrammarDurationOrDurationSet"},
{Message::MessageID::GrammarSpaceDelimitedDurations, "parse error: GrammarSpaceDelimitedDurations"},
- {Message::MessageID::GrammarPaddedOperatorRepeat, "expecting '*' or '%' after a numeric constant."},
- {Message::MessageID::GrammarPaddedOperatorRepeatEach, "expecting '*' or '%' after a numeric constant."},
+ {Message::MessageID::GrammarMissingRepeatOperator, "expecting '*' or '%' after a numeric constant."},
{Message::MessageID::GrammarPhrase2, "parse error: GrammarPhrase2"},
{Message::MessageID::GrammarPhrase3, "parse error: GrammarPhrase3"},
{Message::MessageID::GrammarPhrase4, "parse error: GrammarPhrase4"},
const Message::MessageID ErrorControl<Grammar::SpaceDelimitedDurations>::ID = Message::MessageID::GrammarSpaceDelimitedDurations;
template<>
-const Message::MessageID ErrorControl<Grammar::PaddedOperator<'*'>>::ID = Message::MessageID::GrammarPaddedOperatorRepeat;
-
-template<>
-const Message::MessageID ErrorControl<Grammar::PaddedOperator<'%'>>::ID = Message::MessageID::GrammarPaddedOperatorRepeatEach;
+const Message::MessageID ErrorControl<Grammar::TrapMissingRepeatOperator>::ID = Message::MessageID::GrammarMissingRepeatOperator;
template<>
const Message::MessageID ErrorControl<
template<>
const Message::MessageID ErrorControl<
- pegtl::sor<Grammar::NoteSequenceInParentheses, Grammar::NoteRepeatEachExpression, Grammar::NoteRepeatExpression, Grammar::NoteAndDuration>
+ pegtl::sor<Grammar::NoteSequenceInParentheses, Grammar::NoteRepeatEachExpression, Grammar::NoteRepeatExpression, Grammar::TrapMissingRepeatOperator, Grammar::NoteAndDuration>
>::ID = Message::MessageID::GrammarPhrase4;
template<>
{
};
+class TrapMissingRepeatOperator : public pegtl::seq<UnsignedInteger, pegtl::raise<TrapMissingRepeatOperator>>
+{
+};
+
template<char TOperator>
class PaddedOperator : public pegtl::pad<pegtl::one<TOperator>, Separator>
{
template<char TOperator, typename... TChildren>
class NoteRepeatExpressionBase
- : public pegtl::if_must<
+ : public pegtl::seq<
UnsignedInteger,
- PaddedOperator<TOperator>,
- pegtl::sor<NoteSequenceInParentheses, TChildren...>
+ pegtl::if_must<
+ PaddedOperator<TOperator>,
+ pegtl::sor<NoteSequenceInParentheses, TChildren...>
+ >
>
{
};
class NoteAndExpression
: public pegtl::list_must<
- pegtl::sor<NoteSequenceInParentheses, NoteRepeatEachExpression, NoteRepeatExpression, NoteAndDuration>,
+ pegtl::sor<NoteSequenceInParentheses, NoteRepeatEachExpression, NoteRepeatExpression, TrapMissingRepeatOperator, NoteAndDuration>,
pegtl::one<'&'>,
Separator
>