Guest User

Untitled

a guest
Aug 20th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. use std::cell::Cell;
  2. use std::str;
  3. use std::char;
  4.  
  5. #[derive(Debug, PartialEq)]
  6. enum TokenType<'a> {
  7. ILLEGAL,
  8. EOF,
  9. IDENT(&'a str),
  10. INT(i64),
  11. ASSIGN,
  12. PLUS,
  13. COMMA,
  14. SEMICOLON,
  15. LPAREN,
  16. RPAREN,
  17. LBRACE,
  18. RBRACE,
  19. FUNCTION,
  20. LET,
  21. }
  22.  
  23. struct Token<'a> {
  24. token_type: TokenType<'a>,
  25. literal: &'a str,
  26. }
  27.  
  28. struct Lexer<'a> {
  29. input: &'a [u8], // assume the text input is all ascii
  30. curr_pos: Cell<usize>,
  31. read_pos: Cell<usize>,
  32. curr_char: Cell<char>,
  33. }
  34.  
  35. impl<'a> Lexer<'a> {
  36. fn next_token(&self) -> Token {
  37. match self.curr_char.get() {
  38. '=' => Token { token_type: TokenType::ASSIGN, literal: "=" },
  39. ';' => Token { token_type: TokenType::SEMICOLON, literal: ";" },
  40. '(' => Token { token_type: TokenType::LPAREN, literal: "(" },
  41. ')' => Token { token_type: TokenType::RPAREN, literal: ")" },
  42. '{' => Token { token_type: TokenType::LBRACE, literal: "{" },
  43. '}' => Token { token_type: TokenType::RBRACE, literal: "}" },
  44. ',' => Token { token_type: TokenType::COMMA, literal: "," },
  45. '+' => Token { token_type: TokenType::PLUS, literal: "+" },
  46. '\0' => Token { token_type: TokenType::EOF, literal: "\0" },
  47. _ => unimplemented!(),
  48. }
  49. }
  50. }
Add Comment
Please, Sign In to add comment