wip dreamberd lexer, parser and compiler
at master 2.0 kB view raw
1use std::fmt::{self, Debug, Display, Formatter}; 2 3#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] 4pub enum TokenType { 5 FunctionDeclaration, 6 Identifier, 7 Lparen, 8 Rparen, 9 Arrow, 10 Lbrace, 11 Rbrace, 12 StringLiteral, 13 Eol, 14 EolDebug, 15 IntLiteral, 16 Primitive, 17 Comma, 18 BoolLiteral, 19 Return, 20 Not, 21 Equals, 22} 23 24#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] 25pub struct Location { 26 pub line: u32, 27 pub col: u32, 28} 29 30impl Display for Location { 31 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { 32 write!(f, "(line: {}, col: {})", self.line, self.col) 33 } 34} 35 36#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)] 37pub struct Token { 38 pub ty: TokenType, 39 pub value: String, 40 pub location: Location, 41} 42 43impl Debug for Token { 44 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { 45 match self.ty { 46 TokenType::FunctionDeclaration => write!(f, "FunctionDeclaration"), 47 TokenType::Identifier => write!(f, "Identifier({})", self.value.clone()), 48 TokenType::Lparen => write!(f, "Lparen"), 49 TokenType::Rparen => write!(f, "Rparen"), 50 TokenType::Arrow => write!(f, "Arrow"), 51 TokenType::Lbrace => write!(f, "Lbrace"), 52 TokenType::Rbrace => write!(f, "Rbrace"), 53 TokenType::StringLiteral => write!(f, "StringLiteral({:?})", self.value.clone()), 54 TokenType::Eol => write!(f, "Eol"), 55 TokenType::EolDebug => write!(f, "EolDebug"), 56 TokenType::IntLiteral => write!(f, "IntLiteral({})", self.value.clone()), 57 TokenType::Primitive => write!(f, "Primitive({})", self.value.clone()), 58 TokenType::Comma => write!(f, "Comma"), 59 TokenType::BoolLiteral => write!(f, "BoolLiteral({})", self.value.clone()), 60 TokenType::Return => write!(f, "Return"), 61 TokenType::Not => write!(f, "Not"), 62 TokenType::Equals => write!(f, "Equals"), 63 } 64 } 65}