pseudo_interpreter/lexer/functions/
comparison.rs1use super::super::Token;
2use crate::{constants::error_handler::PseudoError, lexer::lexer::Lexer};
3
4pub trait Comparison {
5 fn encode_comparison(&mut self) -> Result<Token, PseudoError>;
10}
11
12impl <'a> Comparison for Lexer<'a> {
13 fn encode_comparison(&mut self) -> Result<Token, PseudoError> {
14 match self.current_char {
15 Some('<') => {
16 self.next_char();
17 if let Some('=') = self.current_char {
18 self.next_char();
19 Ok(Token::LessThanEqual)
20 } else {
21 Ok(Token::LessThan)
22 }
23 }
24 Some('>') => {
25 self.next_char();
26 if let Some('=') = self.current_char {
27 self.next_char();
28 Ok(Token::GreaterThanEqual)
29 } else {
30 Ok(Token::GreaterThan)
31 }
32 }
33 Some('!') => {
34 self.next_char();
35 if let Some('=') = self.current_char {
36 self.next_char();
37 Ok(Token::NotEqual)
38 } else {
39 Ok(Token::Not)
40 }
41 }
42 Some('=') => {
43 self.next_char();
44 if let Some('=') = self.current_char {
45 self.next_char();
46 Ok(Token::Equal)
47 } else {
48 Ok(Token::Assign)
49 }
50 }
51 Some('&') => {
52 self.next_char();
53 if let Some('&') = self.current_char {
54 self.next_char();
55 Ok(Token::And)
56 } else {
57 return Err(PseudoError::InvalidToken("Invalid character: &".to_string()));
58 }
59 }
60 Some('|') => {
61 self.next_char();
62 if let Some('|') = self.current_char {
63 self.next_char();
64 Ok(Token::Or)
65 } else {
66 return Err(PseudoError::InvalidToken("Invalid character: |".to_string()));
67 }
68 }
69 _ => return Err(PseudoError::InvalidToken("Invalid character:".to_string())),
70 }
71 }
72}