Initial commit with lexer

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
2020-04-27 12:42:17 -04:00
commit 58421a0469
10 changed files with 759 additions and 0 deletions

68
src/syn/token.rs Normal file
View File

@@ -0,0 +1,68 @@
use crate::syn::span::*;
use std::fmt::{Display, Formatter, self};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TokenKind {
Ident,
Num,
Str,
Sym,
LParen,
RParen,
LBrace,
RBrace,
LBracket,
RBracket,
Comma,
Eq,
Arrow,
KwReturn,
}
impl Display for TokenKind {
fn fmt(&self, fmt: &mut Formatter) -> fmt::Result {
use TokenKind::*;
let s = match self {
Ident => "identifier",
Num => "number",
Str => "string",
Sym => "symbol",
LParen => "left paren",
RParen => "right paren",
LBrace => "left brace",
RBrace => "right brace",
LBracket => "left bracket",
RBracket => "right bracket",
Comma => "comma",
Eq => "equals",
Arrow => "arrow",
KwReturn => "return keyword",
};
Display::fmt(s, fmt)
}
}
pub struct Token {
kind: TokenKind,
span: Span,
}
impl Token {
pub fn new(kind: TokenKind, span: Span) -> Self {
Token { kind, span, }
}
pub fn kind(&self) -> TokenKind {
self.kind
}
}
impl Spanned for Token {
fn span(&self) -> Span { self.span }
}