From 9c4b57f2170571ec2851fb5ba764f744830a7a57 Mon Sep 17 00:00:00 2001 From: Robert Bendun Date: Sun, 29 May 2022 22:46:20 +0200 Subject: [PATCH] Human readable token type names for error reporting --- src/lexer.cc | 18 ++++++++++++++++++ src/musique.hh | 2 ++ src/parser.cc | 4 ++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/lexer.cc b/src/lexer.cc index b732763..5582596 100644 --- a/src/lexer.cc +++ b/src/lexer.cc @@ -240,3 +240,21 @@ std::ostream& operator<<(std::ostream& os, Token::Type type) } unreachable(); } + +std::string_view type_name(Token::Type type) +{ + switch (type) { + case Token::Type::Chord: return "chord"; + case Token::Type::Close_Block: return "]"; + case Token::Type::Close_Paren: return ")"; + case Token::Type::Expression_Separator: return "|"; + case Token::Type::Keyword: return "keyword"; + case Token::Type::Numeric: return "numeric"; + case Token::Type::Open_Block: return "["; + case Token::Type::Open_Paren: return "("; + case Token::Type::Operator: return "operator"; + case Token::Type::Parameter_Separator: return "parameter separator"; + case Token::Type::Symbol: return "symbol"; + } + unreachable(); +} diff --git a/src/musique.hh b/src/musique.hh index 263df29..a789fbf 100644 --- a/src/musique.hh +++ b/src/musique.hh @@ -350,6 +350,8 @@ struct Token Location location; }; +std::string_view type_name(Token::Type type); + /// Token debug printing std::ostream& operator<<(std::ostream& os, Token const& tok); diff --git a/src/parser.cc b/src/parser.cc index acfce14..e13fe97 100644 --- a/src/parser.cc +++ b/src/parser.cc @@ -66,7 +66,7 @@ Result Parser::parse_variable_declaration() Error error; errors::Expected_Keyword kw { .keyword = "var" }; if (token_id >= tokens.size()) { - kw.received_type = ""; // TODO Token type + kw.received_type = type_name(peek()->type); error.location = peek()->location; } error.details = std::move(kw); @@ -170,7 +170,7 @@ Result Parser::parse_atomic_expression() default: return Error { .details = errors::internal::Unexpected_Token { - .type = "", // TODO fill type + .type = type_name(peek()->type), .source = peek()->source, .when = "atomic expression parsing" },