From c04bf2273e92ef34fc3731e16187e3e0dfea9901 Mon Sep 17 00:00:00 2001 From: Yehowshua Immanuel Date: Sat, 28 May 2022 21:37:43 -0400 Subject: [PATCH] will probably abandon this --- src/main.rs | 77 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 72 insertions(+), 5 deletions(-) diff --git a/src/main.rs b/src/main.rs index d20cb75..8af6605 100644 --- a/src/main.rs +++ b/src/main.rs @@ -59,17 +59,17 @@ struct VCD { // the root scope should always be placed at index 0 all_scopes : Vec} -#[derive(Debug)] +#[derive(Debug, PartialEq)] enum Date_Parser_State {Begin, Parsing} -#[derive(Debug)] +#[derive(Debug, PartialEq)] enum Version_Parser_State {Begin, Parsing} -#[derive(Debug)] +#[derive(Debug, PartialEq)] enum Timescale_Parser_State {Begin, Parsing} -#[derive(Debug)] +#[derive(Debug, PartialEq)] enum Signal_Tree_Parser_State {Begin, Parsing} -#[derive(Debug)] +#[derive(Debug, PartialEq)] enum Parser_State { Date(Date_Parser_State), Version(Version_Parser_State), @@ -167,6 +167,73 @@ impl<'a> VCD_Parser<'a> { } } + #[named] + pub fn parse_statement( + &'a mut self, + curr_word : &str, + key_word : &str, + begin_state : Parser_State, + parsing_state : Parser_State, + end_state : Parser_State, + next_parser : fn(&'a mut VCD_Parser, &str) -> Result<(), String> + ) -> Result<(), String> { + let mut state = &mut self.vcd_parser_state; + + if (*state == begin_state) { + return match curr_word { + key_word => { + *state = Parser_State::Date(Date_Parser_State::Parsing); + Ok(()) + } + _ => { + *state = Parser_State::Version(Version_Parser_State::Begin); + next_parser(self, curr_word) + } + } + } + else { + Ok(()) + } + // Ok(()) + + // match state { + // Parser_State::Date(Date_Parser_State::Begin) => + // match curr_word { + // key_word => { + // *state = Parser_State::Date(Date_Parser_State::Parsing); + // Ok(()) + // } + // _ => { + // *state = Parser_State::Version(Version_Parser_State::Begin); + // self.parse_version(curr_word) + // } + // } + // Parser_State::Date(Date_Parser_State::Parsing) => + // match curr_word { + // "$end" => { + // let s = self.buffer.take().unwrap(); + // let dt = Utc.datetime_from_str(s.as_str(), "%a %b %e %T %Y") + // .expect(&format!("invalid date {s}").as_str()); + // *state = Parser_State::Version(Version_Parser_State::Begin); + // self.vcd.metadata.date = Some(dt); + // Ok(()) + // } + // _ => { + // if let Some(ref mut buffer) = self.buffer { + // buffer.push_str(" "); + // buffer.push_str(curr_word); + // } + // else { + // self.buffer = Some(curr_word.to_string()); + // } + // Ok(()) + // } + // } + // _ => Err(format!("{state:?} should be unreachable within {}.",function_name!())), + + // } + } + #[named] pub fn parse_version(&mut self, word : &str) -> Result<(), String> { let mut state = &mut self.vcd_parser_state;