Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::cell::Cell;
- use std::str;
- use std::char;
- #[derive(Debug, PartialEq)]
- enum TokenType<'a> {
- ILLEGAL,
- EOF,
- IDENT(&'a str),
- INT(i64),
- ASSIGN,
- PLUS,
- COMMA,
- SEMICOLON,
- LPAREN,
- RPAREN,
- LBRACE,
- RBRACE,
- FUNCTION,
- LET,
- }
- struct Token<'a> {
- token_type: TokenType<'a>,
- literal: &'a str,
- }
- struct Lexer<'a> {
- input: &'a [u8], // assume the text input is all ascii
- curr_pos: Cell<usize>,
- read_pos: Cell<usize>,
- curr_char: Cell<char>,
- }
- impl<'a> Lexer<'a> {
- fn next_token(&self) -> Token {
- match self.curr_char.get() {
- '=' => Token { token_type: TokenType::ASSIGN, literal: "=" },
- ';' => Token { token_type: TokenType::SEMICOLON, literal: ";" },
- '(' => Token { token_type: TokenType::LPAREN, literal: "(" },
- ')' => Token { token_type: TokenType::RPAREN, literal: ")" },
- '{' => Token { token_type: TokenType::LBRACE, literal: "{" },
- '}' => Token { token_type: TokenType::RBRACE, literal: "}" },
- ',' => Token { token_type: TokenType::COMMA, literal: "," },
- '+' => Token { token_type: TokenType::PLUS, literal: "+" },
- '\0' => Token { token_type: TokenType::EOF, literal: "\0" },
- _ => unimplemented!(),
- }
- }
- }
Add Comment
Please, Sign In to add comment