Added lexer
This commit is contained in:
parent
a9a1e22760
commit
399bd4f6a1
|
@ -1,5 +1,6 @@
|
|||
// Rhea
|
||||
|
||||
mod syntax;
|
||||
mod utils;
|
||||
|
||||
use std::io::{stdin, Read};
|
||||
|
|
1
src/syntax/mod.rs
Normal file
1
src/syntax/mod.rs
Normal file
|
@ -0,0 +1 @@
|
|||
pub mod token;
|
68
src/syntax/token.rs
Normal file
68
src/syntax/token.rs
Normal file
|
@ -0,0 +1,68 @@
|
|||
use lasso::{Rodeo, Spur};
|
||||
use logos::Logos;
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct Extras {
|
||||
pub interner: Rodeo,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Logos)]
|
||||
#[logos(extras = Extras)]
|
||||
#[logos(skip r"[ \t\n\f]+")]
|
||||
#[logos(skip r"\\.*")]
|
||||
#[rustfmt::skip]
|
||||
pub enum Token {
|
||||
#[token("(")] LeftParen,
|
||||
#[token(")")] RightParen,
|
||||
#[token("{")] LeftCurly,
|
||||
#[token("}")] RightCurly,
|
||||
#[token(".")] Dot,
|
||||
#[token(",")] Comma,
|
||||
#[token(":")] Colon,
|
||||
#[token(";")] Semicolon,
|
||||
|
||||
#[token("←")] //______
|
||||
#[token("<-")] LArrow,
|
||||
#[token("→")] //______
|
||||
#[token("->")] RArrow,
|
||||
|
||||
#[token("+")] Plus,
|
||||
#[token("-")] Minus,
|
||||
#[token("*")] Star,
|
||||
#[token("/")] Slash,
|
||||
|
||||
#[token("=")] Equ,
|
||||
#[token("≠")] //___
|
||||
#[token("/=")] Neq,
|
||||
#[token("<")] Lt,
|
||||
#[token(">")] Gt,
|
||||
#[token("≤")] //____
|
||||
#[token("<=")] LtEq,
|
||||
#[token("≥")] //____
|
||||
#[token(">=")] GtEq,
|
||||
|
||||
#[token("func")] Func,
|
||||
#[token("var")] Var,
|
||||
#[token("const")] Const,
|
||||
#[token("include")] Include,
|
||||
#[token("switch")] Switch,
|
||||
#[token("loop")] Loop,
|
||||
|
||||
#[regex(
|
||||
r"\p{XID_Start}\p{XID_Continue}*",
|
||||
|l| l.extras.interner.get_or_intern(l.slice()),
|
||||
)] Ident(Spur),
|
||||
|
||||
#[regex(
|
||||
"\"[^\"]*\"",
|
||||
|l| {
|
||||
let s = l.slice();
|
||||
l.extras.interner.get_or_intern(&s[1..s.len() - 1])
|
||||
},
|
||||
)] String(Spur),
|
||||
|
||||
#[regex(
|
||||
"[0-9]+",
|
||||
|l| l.slice().parse::<u64>().ok()
|
||||
)] Int(u64),
|
||||
}
|
Loading…
Reference in a new issue