OSDN Git Service

c3270d3 の修正
authorstarg <starg@users.osdn.me>
Sun, 21 Aug 2016 06:08:48 +0000 (15:08 +0900)
committerstarg <starg@users.osdn.me>
Sun, 21 Aug 2016 06:08:48 +0000 (15:08 +0900)
include/message/id.hpp
src/driver/msgcallback.cpp
src/parser/error_phrase.hpp
src/parser/parser_phrase.hpp

index 783e3da..3a86f03 100644 (file)
@@ -66,8 +66,7 @@ enum class MessageID : int
     GrammarSpaceDelimitedChords,
     GrammarDurationOrDurationSet,
     GrammarSpaceDelimitedDurations,
-    GrammarPaddedOperatorRepeat,
-    GrammarPaddedOperatorRepeatEach,
+    GrammarMissingRepeatOperator,
     GrammarPhrase2,
     GrammarPhrase3,
     GrammarPhrase4,
index d85e4f9..92095b5 100644 (file)
@@ -87,8 +87,7 @@ MessagePrinter::MessagePrinter(IStdErrWriter* pStdErrWriter)
         {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"},
index 88cff41..02cb5fe 100644 (file)
@@ -37,10 +37,7 @@ template<>
 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<
@@ -54,7 +51,7 @@ 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<>
index a6c459f..d2fa281 100644 (file)
@@ -98,6 +98,10 @@ class NoteSequenceInParentheses : public pegtl::if_must<pegtl::one<'('>, NoteSeq
 {
 };
 
+class TrapMissingRepeatOperator : public pegtl::seq<UnsignedInteger, pegtl::raise<TrapMissingRepeatOperator>>
+{
+};
+
 template<char TOperator>
 class PaddedOperator : public pegtl::pad<pegtl::one<TOperator>, Separator>
 {
@@ -105,10 +109,12 @@ 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...>
+        >
     >
 {
 };
@@ -123,7 +129,7 @@ class NoteRepeatEachExpression : public NoteRepeatExpressionBase<'%', NoteRepeat
 
 class NoteAndExpression
     : public pegtl::list_must<
-        pegtl::sor<NoteSequenceInParentheses, NoteRepeatEachExpression, NoteRepeatExpression, NoteAndDuration>,
+        pegtl::sor<NoteSequenceInParentheses, NoteRepeatEachExpression, NoteRepeatExpression, TrapMissingRepeatOperator, NoteAndDuration>,
         pegtl::one<'&'>,
         Separator
     >