Chess notation parser
Crate transforms algebraic chess notation into software readable structs and
vice versa. Parsed chess notation for each turn is stored within Turn
struct.
To parse a certain chess turn, such as d2xe3, store it in form of &str and
pass it as an argument into Turn::try_from() function.
Turn is an enum with two elements:
Castling- a struct which describes castling turnMove- a struct which describes every other possible turn
Example for Castling turn
0-0 will be translated to:
Castling;
Examples for Move turns
d6 will be translated to:
Move ;
d7xe8=B+? will be translated to:
Move ;
Nab3# will be translated to:
Move ;
Chess notation parser rules
-
Square notation should use lowercase alphabetic characters
- Valid:
a1,a2...h7,h8.
- Valid:
-
Castling notation can be written with both
0andO- Valid example:
0-0-0orO-O - When
Castlingturn is printed out, it will be printed with0notation
- Valid example:
-
Notation for pieces:
K: KingQ: QueenR: RookB: BishopN: Knight- Pawns are indicated by the absence of the letter
-
Capture is annotated with a lowercase
xcharacter- Valid example:
Qxd3
- Valid example:
-
Check is annotated with a
+character- Valid example:
Qd3+
- Valid example:
-
Checkmate is annotated with a
#character- Valid example:
Qd3#
- Valid example:
-
Pawn promotion is annoted with
=symbol followed by a piece to which pawn is promoted to- Pawn promotion is valid only for ranks
8and1 - Valid example:
g8=Q
- Pawn promotion is valid only for ranks
-
Comments
??,!!,?,!,!?,?!are allowed only at the end of the turn- Valid example:
a1=B?? - Invalid example:
??a1=B
- Valid example:
About
I don't really play chess that much, but I needed something to practice my Rust skills, so this was sort of a fun project. This particular crate was created for the purpose of Pacifist chess simulation.