2016-12-25 12:24:04 -07:00
|
|
|
/* token.rs
|
|
|
|
* Eryn Wells <eryn@erynwells.me>
|
|
|
|
*/
|
2016-12-24 08:47:02 -07:00
|
|
|
|
2016-12-26 18:23:58 -07:00
|
|
|
use lexer::number::Number;
|
|
|
|
|
|
|
|
#[derive(PartialEq, Debug)]
|
2016-12-25 12:24:04 -07:00
|
|
|
pub enum Token {
|
2016-12-26 18:23:58 -07:00
|
|
|
Boolean(bool),
|
|
|
|
Comment(String),
|
|
|
|
Dot,
|
|
|
|
Identifier(String),
|
2016-12-25 12:24:04 -07:00
|
|
|
LeftParen(String),
|
2016-12-25 20:59:21 -07:00
|
|
|
LeftVectorParen,
|
2016-12-26 18:23:58 -07:00
|
|
|
Number(Number),
|
2016-12-28 08:40:31 -07:00
|
|
|
Quote,
|
2016-12-25 12:24:04 -07:00
|
|
|
RightParen(String),
|
2016-12-25 15:03:18 -07:00
|
|
|
String(String),
|
2016-12-24 08:47:02 -07:00
|
|
|
}
|
|
|
|
|
2016-12-25 12:24:04 -07:00
|
|
|
/// A Lex is a Token extracted from a specific position in an input. It contains useful information about the token's
|
|
|
|
/// place.
|
2016-12-24 14:03:37 -07:00
|
|
|
#[derive(Debug)]
|
2016-12-25 12:24:04 -07:00
|
|
|
pub struct Lex {
|
2016-12-25 14:20:25 -07:00
|
|
|
pub token: Token,
|
2016-12-27 10:53:38 -07:00
|
|
|
pub line: usize,
|
|
|
|
pub offset: usize,
|
2016-12-24 08:47:02 -07:00
|
|
|
}
|
|
|
|
|
2016-12-25 12:24:04 -07:00
|
|
|
impl Lex {
|
2016-12-27 10:53:38 -07:00
|
|
|
pub fn new(token: Token, line: usize, offset: usize) -> Lex {
|
|
|
|
Lex { token: token, line: line, offset: offset }
|
2016-12-24 08:47:02 -07:00
|
|
|
}
|
|
|
|
}
|