use std::fmt;
use source_span::Span;
use super::Located;
#[derive(Clone, PartialEq, Eq, Debug)]
pub enum Litteral {
String(String)
}
#[derive(Clone, PartialEq, Eq, Debug)]
pub enum Token {
EndOfFile,
Begin,
End,
Ident(String),
Litteral(Litteral),
}
impl Token {
pub fn at(self, span: Span) -> Located<Token> {
Located::new(self, span)
}
}
impl fmt::Display for Token {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
use self::Token::*;
match self {
EndOfFile => write!(f, "<end of file>"),
Begin => write!(f, "("),
End => write!(f, ")"),
Ident(id) => write!(f, "{}", id),
Litteral(lit) => write!(f, "{}", lit)
}
}
}
impl fmt::Display for Litteral {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
use self::Litteral::*;
match self {
String(string) => write!(f, "\"{}\"", string)
}
}
}