Skip to content

Commit

Permalink
another small cleanup to the parser
Browse files Browse the repository at this point in the history
  • Loading branch information
Toyz committed Mar 21, 2024
1 parent 6603f5b commit 2b62a82
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 24 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ clap = { version = "4.5.3", features = ["derive"] }
gif = "0.13.1"
image = "0.25.0"
rand = "0.9.0-alpha.1"
once_cell = "1.19.0"
2 changes: 1 addition & 1 deletion src/eval.rs
Original file line number Diff line number Diff line change
Expand Up @@ -607,4 +607,4 @@ fn wrapping_vec_add_u32(a: [u8; 8]) -> u32 {
sum = sum.wrapping_add(i as u32);
}
sum
}
}
48 changes: 25 additions & 23 deletions src/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

use std::collections::VecDeque;

#[derive(Debug, Clone, PartialEq)]
#[derive(Debug, Clone, PartialEq, Eq, Hash, Copy)]
pub enum Token {
Num(u8),
Add,
Expand Down Expand Up @@ -61,29 +61,11 @@ pub(crate) fn shunting_yard(input: &str) -> Result<Vec<Token>, String> {
None => Some(digit as u8),
};
}
'+' | '-' | '*' | '/' | '%' | '#' | '&' | '|' | ':' | '^' | '<' | '>' | '?' | '@' => {
c if char_to_token(c).is_some() => {
push_number_buffer(&mut number_buffer, &mut output_queue, current_position)?;
handle_operator(
&mut operator_stack,
&mut output_queue,
match c {
'+' => Token::Add,
'-' => Token::Sub,
'*' => Token::Mul,
'/' => Token::Div,
'%' => Token::Mod,
'#' => Token::Pow,
'&' => Token::BitAnd,
'|' => Token::BitOr,
':' => Token::BitAndNot,
'^' => Token::BitXor,
'<' => Token::BitLShift,
'>' => Token::BitRShift,
'?' => Token::Greater,
'@' => Token::Weight,
_ => unreachable!(),
},
);
if let Some(token) = char_to_token(c) {
handle_operator(&mut operator_stack, &mut output_queue, token);
}
}
'(' => {
push_number_buffer(&mut number_buffer, &mut output_queue, current_position)?;
Expand Down Expand Up @@ -179,6 +161,26 @@ fn valid_tok(tok: char) -> bool {
)
}

fn char_to_token(c: char) -> Option<Token> {
match c {
'+' => Some(Token::Add),
'-' => Some(Token::Sub),
'*' => Some(Token::Mul),
'/' => Some(Token::Div),
'%' => Some(Token::Mod),
'#' => Some(Token::Pow),
'&' => Some(Token::BitAnd),
'|' => Some(Token::BitOr),
':' => Some(Token::BitAndNot),
'^' => Some(Token::BitXor),
'<' => Some(Token::BitLShift),
'>' => Some(Token::BitRShift),
'?' => Some(Token::Greater),
'@' => Some(Token::Weight),
_ => None,
}
}

#[cfg(test)]
mod tests {
use super::*;
Expand Down

0 comments on commit 2b62a82

Please sign in to comment.