sibil/src/lexer/token.rs

42 lines
740 B
Rust

/// # Token
use std::fmt;
pub enum Kind {
LeftParen,
RightParen,
Identifier,
}
pub struct Token {
kind: Kind,
value: String,
}
impl Token {
fn new(kind: Kind, value: String) -> Token {
Token { kind: kind, value: value, }
}
}
//
// Display
//
impl fmt::Display for Kind {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let s = match *self {
Kind::LeftParen => "LeftParen",
Kind::RightParen => "RightParen",
Kind::Identifier => "Identifier",
};
write!(f, "{}", s)
}
}
impl fmt::Display for Token {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "({}, \"{}\")", self.kind, self.value)
}
}