\section{Implementation} \subsection{Engine} An engine implementing GTP.\@ It is designed to be used by a software controller but can also be directly run, mostly for debugging purposes. Its design is shown in \fref{fig:engine} \begin{figure}[h] \begin{center} \includegraphics[width=\textwidth]{diagrams/gtpEngine.png} \caption{Design of the GTP engine.}\label{fig:engine} \end{center} \end{figure} \subsection{Modules} One module to store the state of the game and the game tree. One module to parse moves. One module to read and write SGF files. Modules are shown in \fref{fig:modules}. \begin{figure}[h] \begin{center} \includegraphics[width=\textwidth]{diagrams/modules.png} \caption{Modules.}\label{fig:modules} \end{center} \end{figure} \subsection{Representation of a match} Strictly said, a match is composed of a series of moves. But since game review and variants exploration is an important part of Go learing, \program{} allows for navigation back and forth through the board states of a match and for new variants to be created from each of these board states. Therefore, a match is represented as a tree of moves. The state of the game must also be present so liberties, captures and legality of moves can be addressed, so it is represented with its own class, which holds a reference both to the game tree and the current move. This classes and their relationship can be seen in \fref{fig:gameRepresentation}. \begin{figure}[h] \begin{center} \includegraphics[width=0.7\textwidth]{diagrams/gameRepresentation.png} \caption{A game is represented as a tree of moves.}\label{fig:gameRepresentation} \end{center} \end{figure} \subsection{SGF} To parse SGF files a lexer and parser have been implemented using PLY.\@ The result of the parsing is an AST (Annotated Syntax Tree) reflecting the contents of the text input, each node with zero or more properties, and with the ability to convert themselves and their corresponding subtree into a GameTree. This is done for the root node, since from the SGF specification there are some properties only usable in the root node, like those which specify general game information and properties such as rank of players or komi. These components are shown in \fref{fig:sgfModule}. \begin{figure}[h] \begin{center} \includegraphics[width=\textwidth]{diagrams/sgfModule.png} \caption{Components of the SGF file parsing module.}\label{fig:sgfModule} \end{center} \end{figure}