From 9b9e466cdb994839cb2d0e1747cd70fca59f3c65 Mon Sep 17 00:00:00 2001 From: Taylor Bockman Date: Mon, 18 Dec 2017 15:23:45 -0800 Subject: [PATCH] some parsy stuff --- src/commands.rs | 40 ------------------------------------ src/parser.rs | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 40 deletions(-) diff --git a/src/commands.rs b/src/commands.rs index a5cc411..432b3c5 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -1,46 +1,6 @@ //! Commands contains the command constants expected during the UCI lifecycle //! It is useful to note many of these commands do not end with '\n'. This is because they expect arguments. -///////// GUI to Engine ///////// - -/// Tell engine to use the UCI (Universal Chess Interface) -pub const UCI: &'static str = "uci\n"; - -/// DEBUG toggles the debug mode of the engine on or off -pub const DEBUG: &'static str = "debug"; -pub const DEBUGON: &'static str = "on"; -pub const DEBUGOFF: &'static str = "off"; - -/// ISREADY synchronizes the engine with the GUI -pub const ISREADY: &'static str = "isready\n"; - -/// SETOPTION is sent to the engine when the user wants to change an internal parameter -pub const SETOPTION: &'static str = "setoption"; - -/// REGISTER is the command used to try to register an engine or tell the engine that registration will be done -/// later -pub const REGISTER: &'static str = "register"; - -/// UCINEWGAME is sent to the engine when the next search (started with "position" and "go") will be from a different -/// game -pub const UCINEWGAME: &'static str = "ucinewgame\n"; - -/// POSITION is sent to set up the position described in fenstring on the internal board and play the moves on the -/// internal chess board -pub const POSITION: &'static str = "position"; - -/// GO signals to start calculating on the current position set up with the "position" command -pub const GO: &'static str = "go\n"; - -/// STOP signals to stop calculating as soon as possible -pub const STOP: &'static str = "stop\n"; - -/// PONDERHIT will be sent if the engine was told to ponder on the same move the user has played -pub const PONDERHIT: &'static str = "ponderhit\n"; - -/// QUIT signals to quit the program as soon as possible -pub const QUIT: &'static str = "quit\n"; - ///////// Engine to GUI ///////// diff --git a/src/parser.rs b/src/parser.rs index e69de29..bf4c0ee 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -0,0 +1,63 @@ +//! Parser contains the command parser for handling receiving commands from the GUI + +use std::collections::HashMap; +use commands; + +/// Token represents a parsable token in the string sent via STDIN from the GUI +pub enum Token { + UCI, + DEBUG, + ISREADY, + SETOPTION, + REGISTER, + UCINEWGAME, + POSITION, + GO, + STOP, + PONDERHIT, + QUIT, +} + +pub enum CommandValue { + Int(i32), + Float(f64), + Text(String), + Boolean(bool), +} + +pub struct Parser {} + +/// TokenResult is a convenient way t package an entire command string. It is identified by it's associated +/// Token, and the arguments. +/// +/// Example: +/// +/// setoption name Hash value 32 +/// --------- ---- ---- ----- -- +/// Token arg val arg val +/// +/// +/// The user is still responsible for knowing what to look for in the hashmap but this structure makes it far +/// easier to work with commands. Some commands don't have arguments, in that case the args will be None. +pub struct TokenResult { + token: Token, + args: Option>, +} + +impl Parser { + + /// Instantiates a new Parser + pub fn new() -> Parser { + Parser{} + } + + /// Parses a single string from the GUI and turns it into a neatly packaged TokenResult for processing + /// by the engine + pub fn parse(s: &str) -> TokenResult { + + } + +} + + +