ParseError¶
-
enum class chesscxx::ParseError : uint8_t¶
Represents possible errors that may occur during parsing operations.
Values:
-
enumerator kInvalidRank¶
Invalid rank token.
-
enumerator kInvalidFile¶
Invalid file token.
-
enumerator kInvalidPieceType¶
Invalid piece type token.
-
enumerator kInvalidPromotablePieceType¶
Invalid promotable piece type token.
-
enumerator kInvalidSanCastling¶
Invalid SAN castling notation.
-
enumerator kInvalidSlashSymbol¶
Invalid slash ‘/’ token.
-
enumerator kMissingPiecePlacementInfo¶
Piece placement information is incomplete.
-
enumerator kMissingRankInfo¶
Rank information is incomplete.
-
enumerator kInvalidPiece¶
Invalid piece token.
-
enumerator kInvalidCastlingAvailability¶
Invalid castling availability string.
-
enumerator kInvalidWhiteSpace¶
Invalid white space token.
-
enumerator kInvalidDashSymbol¶
Invalid dash ‘-’ token.
-
enumerator kNumberOutOfRange¶
Parsed number is out of range.
-
enumerator kInvalidNumber¶
Invalid number format.
-
enumerator kInvalidColor¶
Invalid color token.
-
enumerator kInvalidCheckIndicator¶
Invalid check indicator token.
-
enumerator kInvalidTag¶
Invalid PGN tag.
-
enumerator kInvalidQuote¶
Invalid quote ‘”’ token.
-
enumerator kInvalidRightBracket¶
Invalid right bracket ‘]’ token.
-
enumerator kInvalidPiecePlacement¶
Parsed PiecePlacement is invalid. See PiecePlacementError to see possible causes.
-
enumerator kInvalidPosition¶
Parsed Position is invalid. See PositionError to see possible causes.
-
enumerator kInvalidGameResult¶
Invalid game result string.
-
enumerator kDuplicatedFenTag¶
Duplicated FEN tag.
-
enumerator kExpectingEndOfString¶
Expected end of string, but found more characters.
-
enumerator kInvalidRank¶
Helper classes¶
-
template<>
struct formatter : public chesscxx::internal::NoSpec - #include <parse_error_formatter.h>
formatting support for chesscxx::ParseError
Examples¶
#include <chesscxx/game.h>
#include <chesscxx/parse.h>
#include <chesscxx/parse_error.h>
#include <print>
#include <string_view>
namespace {
void printErrorOrValue(auto parsed_value) {
if (parsed_value) {
std::println("{:fen}", parsed_value.value());
} else {
std::println("{}", parsed_value.error());
}
}
void parseAsPgnAndPrint(std::string_view str) {
auto parsed_game = chesscxx::parse<chesscxx::Game>(str);
printErrorOrValue(parsed_game);
}
void parseAsFenAndPrint(std::string_view str) {
auto parsed_game =
chesscxx::parse<chesscxx::Game>(str, chesscxx::parse_as::Fen{});
printErrorOrValue(parsed_game);
}
} // namespace
auto main() -> int {
std::println("{}", chesscxx::ParseError::kInvalidRank);
std::println("{}\n", chesscxx::ParseError::kExpectingEndOfString);
parseAsFenAndPrint(
"rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1");
parseAsFenAndPrint(
"rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1 ");
parseAsPgnAndPrint(
"rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1");
parseAsPgnAndPrint(
"[FEN \"7k/8/6KN/8/7B/8/8/8 w - - 0 1\"]\n"
"[FEN \"7k/8/6KN/8/7B/8/8/8 w - - 0 1\"]\n"
"1. Bf6#");
parseAsPgnAndPrint(
"[FEN \"7k/8/6KN/8/7B/8/8/8 w - - 0 1\"]\n"
"1. Bf6#");
parseAsPgnAndPrint(
"[]\n"
"1. b3 e5 2. Bb2 d6 3. e3 Nf6 4. d4 exd4 5. Qxd4 Be7 6. Nf3 O-O 7. Nbd2 "
"Nc6 8. Qc3 Nd5 9. Qxg7# 1-0");
parseAsPgnAndPrint(
"[Result \"1-0\"]\n"
"1. b3 e5 2. Bb2 d6 3. e3 Nf6 4. d4 exd4 5. Qxd4 Be7 6. Nf3 O-O 7. Nbd2 "
"Nc6 8. Qc3 Nd5 9. Qxg7# 1-0");
}
Output:
Invalid rank
Expecting end of string
rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1
Expecting end of string
Invalid file
Duplicated fen tag
7k/8/5BKN/8/8/8/8/8 b - - 1 1
Invalid tag
r1bq1rk1/ppp1bpQp/2np4/3n4/8/1P2PN2/PBPN1PPP/R3KB1R b KQ - 0 9