GrammarUntilSingleQuote,
// error_module.hpp
+ GrammarTrapNeitherCompositionNorPhrase,
GrammarPhrasesAndCompositions,
// grammar_phrase.hpp
{Message::MessageID::GrammarUntilSingleQuote, "unterminated string literal (missing single quote)"},
// error_module.hpp
- {Message::MessageID::GrammarPhrasesAndCompositions, "parse error: GrammarPhrasesAndCompositions"},
+ {Message::MessageID::GrammarTrapNeitherCompositionNorPhrase, "unexpected token '{0}', expecting 'phrase' or 'composition'"},
+ {Message::MessageID::GrammarPhrasesAndCompositions, "expecting 'phrase' or 'composition'"},
// grammar_phrase.hpp
{Message::MessageID::GrammarNoteSequenceBlockWithoutAttributes, "expecting '{' here"},
{
template<>
+const Message::MessageID ErrorControl<Grammar::TrapNeitherCompositionNorPhrase>::ID = Message::MessageID::GrammarTrapNeitherCompositionNorPhrase;
+
+template<>
const Message::MessageID ErrorControl<Grammar::PhrasesAndCompositions>::ID = Message::MessageID::GrammarPhrasesAndCompositions;
template<>
#include <pegtl.hh>
+#include "parser_attribute.hpp"
#include "parser_composition.hpp"
#include "parser_phrase.hpp"
#include "parser_skips.hpp"
namespace Grammar
{
-class PhrasesAndCompositions : public pegtl::star<pegtl::pad<pegtl::sor<Composition, Phrase>, Separator>>
+class TrapNeitherCompositionNorPhrase
+ : public pegtl::seq<
+ pegtl::disable<AttributeOptionalSequence>,
+ pegtl::not_at<pegtl::eof>,
+ pegtl::raise<TrapNeitherCompositionNorPhrase>
+ >
+{
+};
+
+class PhrasesAndCompositions : public pegtl::star<pegtl::pad<pegtl::sor<Composition, Phrase, TrapNeitherCompositionNorPhrase>, Separator>>
{
};