Improve error messages for invalid ubiquitous tokens

This commit is contained in:
Max Brunsfeld 2014-09-10 13:02:16 -07:00
parent 2e7ffb4d14
commit cd8a683229
2 changed files with 10 additions and 6 deletions

View file

@ -214,7 +214,9 @@ describe("extract_tokens", []() {
}).ubiquitous_tokens({ i_sym(1) }));
AssertThat(get<2>(result), !Equals<const GrammarError *>(nullptr));
AssertThat(get<2>(result), EqualsPointer(new GrammarError(GrammarErrorTypeInvalidUbiquitousToken, "Not a token: (sym 1)")));
AssertThat(get<2>(result), EqualsPointer(
new GrammarError(GrammarErrorTypeInvalidUbiquitousToken,
"Not a token: rule_B")));
});
});
@ -226,7 +228,9 @@ describe("extract_tokens", []() {
}).ubiquitous_tokens({ choice({ i_sym(1), blank() }) }));
AssertThat(get<2>(result), !Equals<const GrammarError *>(nullptr));
AssertThat(get<2>(result), EqualsPointer(new GrammarError(GrammarErrorTypeInvalidUbiquitousToken, "Not a token: (choice (sym 1) (blank))")));
AssertThat(get<2>(result), EqualsPointer(
new GrammarError(GrammarErrorTypeInvalidUbiquitousToken,
"Not a token: (choice (sym 1) (blank))")));
});
});
});

View file

@ -92,10 +92,10 @@ class TokenExtractor : public rules::IdentityRuleFn {
};
static tuple<SyntaxGrammar, LexicalGrammar, const GrammarError *> ubiq_token_err(
const rule_ptr rule) {
const string &msg) {
return make_tuple(SyntaxGrammar(), LexicalGrammar(),
new GrammarError(GrammarErrorTypeInvalidUbiquitousToken,
"Not a token: " + rule->to_string()));
"Not a token: " + msg));
}
tuple<SyntaxGrammar, LexicalGrammar, const GrammarError *> extract_tokens(
@ -128,11 +128,11 @@ tuple<SyntaxGrammar, LexicalGrammar, const GrammarError *> extract_tokens(
} else {
auto sym = dynamic_pointer_cast<const Symbol>(extractor.apply(rule));
if (!sym.get())
return ubiq_token_err(rule);
return ubiq_token_err(rule->to_string());
Symbol symbol = symbol_replacer.replace_symbol(*sym);
if (!symbol.is_token())
return ubiq_token_err(rule);
return ubiq_token_err(rules[symbol.index].first);
ubiquitous_tokens.insert(symbol);
}