From c0dc1361ae89e6b6456860c0ecae85590bd8164d Mon Sep 17 00:00:00 2001 From: janis Date: Sun, 2 Nov 2025 00:00:22 +0100 Subject: [PATCH] add more tokens --- lang/src/tokeniser.inc | 184 ++++++++++++++++++++++++++++++-------- lang/tests/shared/defs.rs | 83 ++++++++++------- lang/tests/tokens.rs | 139 ++++++++++++++++------------ 3 files changed, 280 insertions(+), 126 deletions(-) diff --git a/lang/src/tokeniser.inc b/lang/src/tokeniser.inc index 89db7ef..1a95a12 100644 --- a/lang/src/tokeniser.inc +++ b/lang/src/tokeniser.inc @@ -16,6 +16,7 @@ LEXEMES: dq LEX_ARROW dq LEX_I32 dq LEX_U32 + dq LEX_EQEQ dq LEX_EQUALS dq LEX_PLUS dq LEX_MINUS @@ -23,12 +24,14 @@ LEXEMES: dq LEX_LPARENS dq LEX_RBRACE dq LEX_LBRACE + dq LEX_COLON2 dq LEX_COLON dq LEX_SEMI dq LEX_COMMA + dq LEX_PIPE2 dq LEX_PIPE + dq LEX_AMP2 dq LEX_AMP - dq LEX_EQEQ dq LEX_LBRACKET dq LEX_RBRACKET dq LEX_VOID @@ -44,6 +47,21 @@ LEXEMES: dq LEX_ISIZE dq LEX_F32 dq LEX_F64 + dq LEX_PERCENT + dq LEX_CARET + dq LEX_BANGEQ + dq LEX_BANG + dq LEX_TILDE + dq LEX_LEQ + dq LEX_GEQ + dq LEX_LESSLESS + dq LEX_GTGT + dq LEX_LT + dq LEX_GT + dq LEX_DOT3 + dq LEX_DOT2 + dq LEX_DOT + dq LEX_BACKTICK align 8 TOKENS: @@ -62,6 +80,7 @@ TOKENS: db TOKEN_ARROW ;; 12 db TOKEN_I32 ;; 13 db TOKEN_U32 ;; 14 + db TOKEN_EQEQ ;; 15 db TOKEN_EQUALS ;; 15 db TOKEN_PLUS ;; 16 db TOKEN_MINUS ;; 17 @@ -69,12 +88,14 @@ TOKENS: db TOKEN_LPARENS ;; 19 db TOKEN_RBRACE ;; 20 db TOKEN_LBRACE ;; 21 + db TOKEN_COLON2 ;; 22 db TOKEN_COLON ;; 22 db TOKEN_SEMI ;; 23 db TOKEN_COMMA ;; 24 + db TOKEN_PIPE2 ;; 25 db TOKEN_PIPE ;; 25 + db TOKEN_AMP2 ;; 26 db TOKEN_AMP ;; 26 - db TOKEN_EQEQ ;; 27 db TOKEN_LBRACKET ;; 28 db TOKEN_RBRACKET ;; 29 db TOKEN_VOID ;; 30 @@ -90,6 +111,21 @@ TOKENS: db TOKEN_ISIZE ;; 40 db TOKEN_F32 ;; 41 db TOKEN_F64 ;; 42 + db TOKEN_PERCENT ;; 43 + db TOKEN_CARET ;; 44 + db TOKEN_BANGEQ ;; 45 + db TOKEN_BANG ;; 46 + db TOKEN_TILDE ;; 47 + db TOKEN_LEQ ;; 48 + db TOKEN_GEQ ;; 49 + db TOKEN_LESSLESS ;; 50 + db TOKEN_GTGT ;; 51 + db TOKEN_LT ;; 50 + db TOKEN_GT ;; 51 + db TOKEN_DOT3 ;; 54 + db TOKEN_DOT2 ;; 53 + db TOKEN_DOT ;; 52 + db TOKEN_BACKTICK ;; 55 align 8 LEXEME_LENS: @@ -108,6 +144,7 @@ LEXEME_LENS: dq LEX_ARROW_len dq LEX_I32_len dq LEX_U32_len + dq LEX_EQEQ_len dq LEX_EQUALS_len dq LEX_PLUS_len dq LEX_MINUS_len @@ -115,12 +152,14 @@ LEXEME_LENS: dq LEX_LPARENS_len dq LEX_RBRACE_len dq LEX_LBRACE_len + dq LEX_COLON2_len dq LEX_COLON_len dq LEX_SEMI_len dq LEX_COMMA_len + dq LEX_PIPE2_len dq LEX_PIPE_len + dq LEX_AMP2_len dq LEX_AMP_len - dq LEX_EQEQ_len dq LEX_LBRACKET_len dq LEX_RBRACKET_len dq LEX_VOID_len @@ -136,9 +175,24 @@ LEXEME_LENS: dq LEX_ISIZE_len dq LEX_F32_len dq LEX_F64_len + dq LEX_PERCENT_len + dq LEX_CARET_len + dq LEX_BANGEQ_len + dq LEX_BANG_len + dq LEX_TILDE_len + dq LEX_LEQ_len + dq LEX_GEQ_len + dq LEX_LESSLESS_len + dq LEX_GTGT_len + dq LEX_LT_len + dq LEX_GT_len + dq LEX_DOT3_len + dq LEX_DOT2_len + dq LEX_DOT_len + dq LEX_BACKTICK_len align 8 -NUM_LEXEMES: dq 43 +NUM_LEXEMES: dq 61 LEX_NOT_A_LEXEME db "", 0 LEX_LET db "let" @@ -169,6 +223,8 @@ NUM_LEXEMES: dq 43 LEX_I32_len equ $ - LEX_I32 LEX_U32 db "u32" LEX_U32_len equ $ - LEX_U32 + LEX_EQEQ db "==" + LEX_EQEQ_len equ $ - LEX_EQEQ LEX_EQUALS db "=" LEX_EQUALS_len equ $ - LEX_EQUALS LEX_PLUS db "+" @@ -183,18 +239,22 @@ NUM_LEXEMES: dq 43 LEX_RBRACE_len equ $ - LEX_RBRACE LEX_LBRACE db "{" LEX_LBRACE_len equ $ - LEX_LBRACE + LEX_COLON2 db "::" + LEX_COLON2_len equ $ - LEX_COLON2 LEX_COLON db ":" LEX_COLON_len equ $ - LEX_COLON LEX_SEMI db ";" LEX_SEMI_len equ $ - LEX_SEMI LEX_COMMA db "," LEX_COMMA_len equ $ - LEX_COMMA + LEX_PIPE2 db "||" + LEX_PIPE2_len equ $ - LEX_PIPE2 LEX_PIPE db "|" LEX_PIPE_len equ $ - LEX_PIPE + LEX_AMP2 db "&&" + LEX_AMP2_len equ $ - LEX_AMP2 LEX_AMP db "&" LEX_AMP_len equ $ - LEX_AMP - LEX_EQEQ db "==" - LEX_EQEQ_len equ $ - LEX_EQEQ LEX_LBRACKET db "[" LEX_LBRACKET_len equ $ - LEX_LBRACKET LEX_RBRACKET db "]" @@ -225,6 +285,36 @@ NUM_LEXEMES: dq 43 LEX_F32_len equ $ - LEX_F32 LEX_F64 db "f64" LEX_F64_len equ $ - LEX_F64 + LEX_PERCENT db "%" + LEX_PERCENT_len equ $ - LEX_PERCENT + LEX_CARET db "^" + LEX_CARET_len equ $ - LEX_CARET + LEX_BANGEQ db "!=" + LEX_BANGEQ_len equ $ - LEX_BANGEQ + LEX_BANG db "!" + LEX_BANG_len equ $ - LEX_BANG + LEX_TILDE db "~" + LEX_TILDE_len equ $ - LEX_TILDE + LEX_LEQ db "<=" + LEX_LEQ_len equ $ - LEX_LEQ + LEX_GEQ db ">=" + LEX_GEQ_len equ $ - LEX_GEQ + LEX_LESSLESS db "<<" + LEX_LESSLESS_len equ $ - LEX_LESSLESS + LEX_GTGT db ">>" + LEX_GTGT_len equ $ - LEX_GTGT + LEX_LT db "<" + LEX_LT_len equ $ - LEX_LT + LEX_GT db ">" + LEX_GT_len equ $ - LEX_GT + LEX_DOT3 db "..." + LEX_DOT3_len equ $ - LEX_DOT3 + LEX_DOT2 db ".." + LEX_DOT2_len equ $ - LEX_DOT2 + LEX_DOT db "." + LEX_DOT_len equ $ - LEX_DOT + LEX_BACKTICK db "`" + LEX_BACKTICK_len equ $ - LEX_BACKTICK LEX_IDENT db "" LEX_IDENT_len equ $ - LEX_IDENT LEX_NUMBER db "" @@ -250,36 +340,54 @@ NUM_LEXEMES: dq 43 TOKEN_ARROW equ 12 ; :u8 TOKEN_I32 equ 13 ; :u8 TOKEN_U32 equ 14 ; :u8 - TOKEN_EQUALS equ 15 ; :u8 - TOKEN_PLUS equ 16 ; :u8 - TOKEN_MINUS equ 17 ; :u8 - TOKEN_RPARENS equ 18 ; :u8 - TOKEN_LPARENS equ 19 ; :u8 - TOKEN_RBRACE equ 20 ; :u8 - TOKEN_LBRACE equ 21 ; :u8 - TOKEN_COLON equ 22 ; :u8 - TOKEN_SEMI equ 23 ; :u8 - TOKEN_COMMA equ 24 ; :u8 - TOKEN_PIPE equ 25 ; :u8 - TOKEN_AMP equ 26 ; :u8 - TOKEN_EQEQ equ 27 ; :u8 - TOKEN_LBRACKET equ 28 ; :u8 - TOKEN_RBRACKET equ 29 ; :u8 - TOKEN_VOID equ 30 ; :u8 - TOKEN_SLASH equ 31 ; :u8 - TOKEN_STAR equ 32 ; :u8 - TOKEN_U8 equ 33 ; :u8 - TOKEN_I8 equ 34 ; :u8 - TOKEN_U16 equ 35 ; :u8 - TOKEN_I16 equ 36 ; :u8 - TOKEN_U64 equ 37 ; :u8 - TOKEN_I64 equ 38 ; :u8 - TOKEN_USIZE equ 39 ; :u8 - TOKEN_ISIZE equ 40 ; :u8 - TOKEN_F32 equ 41 ; :u8 - TOKEN_F64 equ 42 ; :u8 - TOKEN_IDENT equ 43 ; :u8 - TOKEN_NUMBER equ 44 ; :u8 - TOKEN_STRING equ 45 ; :u8 - TOKEN_COMMENT equ 46 ; :u8 + TOKEN_EQEQ equ 15 ; :u8 + TOKEN_EQUALS equ 16 ; :u8 + TOKEN_PLUS equ 17 ; :u8 + TOKEN_MINUS equ 18 ; :u8 + TOKEN_RPARENS equ 19 ; :u8 + TOKEN_LPARENS equ 20 ; :u8 + TOKEN_RBRACE equ 21 ; :u8 + TOKEN_LBRACE equ 22 ; :u8 + TOKEN_COLON equ 23 ; :u8 + TOKEN_COLON2 equ 24 ; :u8 + TOKEN_SEMI equ 25 ; :u8 + TOKEN_COMMA equ 26 ; :u8 + TOKEN_PIPE equ 27 ; :u8 + TOKEN_PIPE2 equ 28 ; :u8 + TOKEN_AMP equ 29 ; :u8 + TOKEN_AMP2 equ 30 ; :u8 + TOKEN_LBRACKET equ 31 ; :u8 + TOKEN_RBRACKET equ 32 ; :u8 + TOKEN_VOID equ 33 ; :u8 + TOKEN_SLASH equ 34 ; :u8 + TOKEN_STAR equ 35 ; :u8 + TOKEN_U8 equ 36 ; :u8 + TOKEN_I8 equ 37 ; :u8 + TOKEN_U16 equ 38 ; :u8 + TOKEN_I16 equ 39 ; :u8 + TOKEN_U64 equ 40 ; :u8 + TOKEN_I64 equ 41 ; :u8 + TOKEN_USIZE equ 42 ; :u8 + TOKEN_ISIZE equ 43 ; :u8 + TOKEN_F32 equ 44 ; :u8 + TOKEN_F64 equ 45 ; :u8 + TOKEN_PERCENT equ 46 ; :u8 + TOKEN_CARET equ 47 ; :u8 + TOKEN_BANGEQ equ 48 ; :u8 + TOKEN_BANG equ 49 ; :u8 + TOKEN_TILDE equ 50 ; :u8 + TOKEN_LEQ equ 51 ; :u8 + TOKEN_GEQ equ 52 ; :u8 + TOKEN_LESSLESS equ 53 ; :u8 + TOKEN_GTGT equ 54 ; :u8 + TOKEN_LT equ 55 ; :u8 + TOKEN_GT equ 56 ; :u8 + TOKEN_DOT3 equ 57 ; :u8 + TOKEN_DOT2 equ 58 ; :u8 + TOKEN_DOT equ 59 ; :u8 + TOKEN_BACKTICK equ 60 ; :u8 + TOKEN_IDENT equ 61 ; :u8 + TOKEN_NUMBER equ 62 ; :u8 + TOKEN_STRING equ 63 ; :u8 + TOKEN_COMMENT equ 64 ; :u8 ;; end-consts diff --git a/lang/tests/shared/defs.rs b/lang/tests/shared/defs.rs index ff8dc43..0aed8ef 100644 --- a/lang/tests/shared/defs.rs +++ b/lang/tests/shared/defs.rs @@ -24,6 +24,7 @@ unsafe extern "C" { pub unsafe fn codegen_allocate_value(ctx: *mut FunctionCtx, width: u16) -> Operand; pub unsafe fn codegen_free_operand(ctx: *mut FunctionCtx, operand: *const Operand) -> (); pub unsafe fn codegen_function(ast: *const CodegenCtx, func_idx: u64) -> (); + pub unsafe fn codegen_push_pop_used_registers(text: *mut Vec, function_ctx: &FunctionCtx, pop: bool) -> u8; pub unsafe fn codegen_expr(ctx: *const CodegenCtx, function_ctx: &FunctionCtx, expr_idx: u64) -> (u64, bool); pub unsafe fn vec_insert_many(vec: *mut BlobVec, index: usize, data: *const u8, count: usize); pub unsafe fn vec_extend(vec: *mut BlobVec, elements: *const u8, count: usize) -> (); @@ -78,38 +79,56 @@ pub const TOKEN_BOOL: u8 = 11; pub const TOKEN_ARROW: u8 = 12; pub const TOKEN_I32: u8 = 13; pub const TOKEN_U32: u8 = 14; -pub const TOKEN_EQUALS: u8 = 15; -pub const TOKEN_PLUS: u8 = 16; -pub const TOKEN_MINUS: u8 = 17; -pub const TOKEN_RPARENS: u8 = 18; -pub const TOKEN_LPARENS: u8 = 19; -pub const TOKEN_RBRACE: u8 = 20; -pub const TOKEN_LBRACE: u8 = 21; -pub const TOKEN_COLON: u8 = 22; -pub const TOKEN_SEMI: u8 = 23; -pub const TOKEN_COMMA: u8 = 24; -pub const TOKEN_PIPE: u8 = 25; -pub const TOKEN_AMP: u8 = 26; -pub const TOKEN_EQEQ: u8 = 27; -pub const TOKEN_LBRACKET: u8 = 28; -pub const TOKEN_RBRACKET: u8 = 29; -pub const TOKEN_VOID: u8 = 30; -pub const TOKEN_SLASH: u8 = 31; -pub const TOKEN_STAR: u8 = 32; -pub const TOKEN_U8: u8 = 33; -pub const TOKEN_I8: u8 = 34; -pub const TOKEN_U16: u8 = 35; -pub const TOKEN_I16: u8 = 36; -pub const TOKEN_U64: u8 = 37; -pub const TOKEN_I64: u8 = 38; -pub const TOKEN_USIZE: u8 = 39; -pub const TOKEN_ISIZE: u8 = 40; -pub const TOKEN_F32: u8 = 41; -pub const TOKEN_F64: u8 = 42; -pub const TOKEN_IDENT: u8 = 43; -pub const TOKEN_NUMBER: u8 = 44; -pub const TOKEN_STRING: u8 = 45; -pub const TOKEN_COMMENT: u8 = 46; +pub const TOKEN_EQEQ: u8 = 15; +pub const TOKEN_EQUALS: u8 = 16; +pub const TOKEN_PLUS: u8 = 17; +pub const TOKEN_MINUS: u8 = 18; +pub const TOKEN_RPARENS: u8 = 19; +pub const TOKEN_LPARENS: u8 = 20; +pub const TOKEN_RBRACE: u8 = 21; +pub const TOKEN_LBRACE: u8 = 22; +pub const TOKEN_COLON: u8 = 23; +pub const TOKEN_COLON2: u8 = 24; +pub const TOKEN_SEMI: u8 = 25; +pub const TOKEN_COMMA: u8 = 26; +pub const TOKEN_PIPE: u8 = 27; +pub const TOKEN_PIPE2: u8 = 28; +pub const TOKEN_AMP: u8 = 29; +pub const TOKEN_AMP2: u8 = 30; +pub const TOKEN_LBRACKET: u8 = 31; +pub const TOKEN_RBRACKET: u8 = 32; +pub const TOKEN_VOID: u8 = 33; +pub const TOKEN_SLASH: u8 = 34; +pub const TOKEN_STAR: u8 = 35; +pub const TOKEN_U8: u8 = 36; +pub const TOKEN_I8: u8 = 37; +pub const TOKEN_U16: u8 = 38; +pub const TOKEN_I16: u8 = 39; +pub const TOKEN_U64: u8 = 40; +pub const TOKEN_I64: u8 = 41; +pub const TOKEN_USIZE: u8 = 42; +pub const TOKEN_ISIZE: u8 = 43; +pub const TOKEN_F32: u8 = 44; +pub const TOKEN_F64: u8 = 45; +pub const TOKEN_PERCENT: u8 = 46; +pub const TOKEN_CARET: u8 = 47; +pub const TOKEN_BANGEQ: u8 = 48; +pub const TOKEN_BANG: u8 = 49; +pub const TOKEN_TILDE: u8 = 50; +pub const TOKEN_LEQ: u8 = 51; +pub const TOKEN_GEQ: u8 = 52; +pub const TOKEN_LESSLESS: u8 = 53; +pub const TOKEN_GTGT: u8 = 54; +pub const TOKEN_LT: u8 = 55; +pub const TOKEN_GT: u8 = 56; +pub const TOKEN_DOT3: u8 = 57; +pub const TOKEN_DOT2: u8 = 58; +pub const TOKEN_DOT: u8 = 59; +pub const TOKEN_BACKTICK: u8 = 60; +pub const TOKEN_IDENT: u8 = 61; +pub const TOKEN_NUMBER: u8 = 62; +pub const TOKEN_STRING: u8 = 63; +pub const TOKEN_COMMENT: u8 = 64; #[repr(C)] #[derive(Debug)] diff --git a/lang/tests/tokens.rs b/lang/tests/tokens.rs index 7c9a6d1..f42376b 100644 --- a/lang/tests/tokens.rs +++ b/lang/tests/tokens.rs @@ -8,9 +8,10 @@ struct Lexeme(u8, &'static str); impl PartialEq for Lexeme { fn eq(&self, other: &Self) -> bool { + use util::defs::{TOKEN_IDENT, TOKEN_NUMBER}; match self.0 { // Identifiers and numbers compare both token and lexeme - 30 | 31 => self.0 == other.0 && self.1 == other.1, + TOKEN_IDENT | TOKEN_NUMBER => self.0 == other.0 && self.1 == other.1, _ => self.0 == other.0, } } @@ -115,17 +116,17 @@ fn main() { assert_eq!( &collect_tokens()[..], &[ - Lexeme(19, ""), - Lexeme(18, ""), - Lexeme(28, ""), - Lexeme(29, ""), - Lexeme(21, ""), - Lexeme(20, ""), - Lexeme(24, ""), - Lexeme(12, ""), - Lexeme(23, ""), - Lexeme(22, ""), - Lexeme(15, ""), + Lexeme(TOKEN_LPARENS, ""), + Lexeme(TOKEN_RPARENS, ""), + Lexeme(TOKEN_LBRACKET, ""), + Lexeme(TOKEN_RBRACKET, ""), + Lexeme(TOKEN_LBRACE, ""), + Lexeme(TOKEN_RBRACE, ""), + Lexeme(TOKEN_COMMA, ""), + Lexeme(TOKEN_ARROW, ""), + Lexeme(TOKEN_SEMI, ""), + Lexeme(TOKEN_COLON, ""), + Lexeme(TOKEN_EQUALS, ""), ][..] ); @@ -143,7 +144,7 @@ fn main() { Lexeme(TOKEN_IDENT, "number12345"), Lexeme(TOKEN_IDENT, "____"), Lexeme(TOKEN_IDENT, "_"), - Lexeme(17, ""), + Lexeme(TOKEN_MINUS, ""), Lexeme(TOKEN_IDENT, "leading-minus"), Lexeme(TOKEN_IDENT, "trailing-minus-"), ] @@ -156,17 +157,17 @@ fn main() { assert_eq!( &collect_tokens()[..], &[ - Lexeme(4, ""), + Lexeme(TOKEN_FN, ""), Lexeme(TOKEN_IDENT, "my-function"), - Lexeme(19, ""), - Lexeme(18, ""), - Lexeme(12, ""), - Lexeme(11, ""), - Lexeme(21, ""), - Lexeme(5, ""), - Lexeme(10, ""), - Lexeme(23, ""), - Lexeme(20, ""), + Lexeme(TOKEN_LPARENS, ""), + Lexeme(TOKEN_RPARENS, ""), + Lexeme(TOKEN_ARROW, ""), + Lexeme(TOKEN_BOOL, ""), + Lexeme(TOKEN_LBRACE, ""), + Lexeme(TOKEN_RETURN, ""), + Lexeme(TOKEN_FALSE, ""), + Lexeme(TOKEN_SEMI, ""), + Lexeme(TOKEN_RBRACE, ""), ] ); @@ -174,8 +175,8 @@ fn main() { tokeniser_init(c"tests/tokens/function.l".as_ptr()); eprintln!("ok."); - assert_eq!(expect_token(2).into_option(), None); - assert_eq!(expect_token(4).into_option().unwrap().as_str(), "fn"); + assert_eq!(expect_token(TOKEN_IF).into_option(), None); + assert_eq!(expect_token(TOKEN_FN).into_option().unwrap().as_str(), "fn"); assert_eq!(unwrap_token(TOKEN_IDENT).as_str(), "my-function"); eprint!("Initializing tokeniser.. "); @@ -186,18 +187,18 @@ fn main() { &collect_tokens()[..], &[ Lexeme(TOKEN_COMMENT, ""), - Lexeme(4, ""), + Lexeme(TOKEN_FN, ""), Lexeme(TOKEN_IDENT, "my-function"), - Lexeme(19, ""), - Lexeme(18, ""), - Lexeme(12, ""), - Lexeme(11, ""), - Lexeme(21, ""), + Lexeme(TOKEN_LPARENS, ""), + Lexeme(TOKEN_RPARENS, ""), + Lexeme(TOKEN_ARROW, ""), + Lexeme(TOKEN_BOOL, ""), + Lexeme(TOKEN_LBRACE, ""), Lexeme(TOKEN_COMMENT, ""), - Lexeme(5, ""), - Lexeme(10, ""), - Lexeme(23, ""), - Lexeme(20, ""), + Lexeme(TOKEN_RETURN, ""), + Lexeme(TOKEN_FALSE, ""), + Lexeme(TOKEN_SEMI, ""), + Lexeme(TOKEN_RBRACE, ""), ] ); @@ -243,7 +244,7 @@ fn main() { &collect_tokens()[..], &[ Lexeme(TOKEN_NUMBER, "3"), - Lexeme(16, "+"), + Lexeme(TOKEN_PLUS, "+"), Lexeme(TOKEN_NUMBER, "4") ], ); @@ -256,19 +257,19 @@ fn main() { assert_eq!( &collect_tokens()[..], &[ - Lexeme(4, "fn"), + Lexeme(TOKEN_FN, "fn"), Lexeme(TOKEN_IDENT, "main"), - Lexeme(19, "("), - Lexeme(18, ")"), - Lexeme(12, "->"), - Lexeme(30, "void"), - Lexeme(21, "{"), - Lexeme(5, "return"), + Lexeme(TOKEN_LPARENS, "("), + Lexeme(TOKEN_RPARENS, ")"), + Lexeme(TOKEN_ARROW, "->"), + Lexeme(TOKEN_VOID, "void"), + Lexeme(TOKEN_LBRACE, "{"), + Lexeme(TOKEN_RETURN, "return"), Lexeme(TOKEN_NUMBER, "1"), - Lexeme(16, "+"), + Lexeme(TOKEN_PLUS, "+"), Lexeme(TOKEN_NUMBER, "2"), - Lexeme(23, ";"), - Lexeme(20, "}"), + Lexeme(TOKEN_SEMI, ";"), + Lexeme(TOKEN_RBRACE, "}"), ], ); @@ -280,16 +281,42 @@ fn main() { assert_eq!( &collect_tokens()[..], &[ - Lexeme(19, "("), - Lexeme(33, "b"), - Lexeme(31, "/"), - Lexeme(33, "d"), - Lexeme(16, "+"), - Lexeme(33, "c"), - Lexeme(18, ")"), - Lexeme(32, "*"), - Lexeme(34, "42"), - Lexeme(23, ";") + Lexeme(TOKEN_LPARENS, "("), + Lexeme(TOKEN_IDENT, "b"), + Lexeme(TOKEN_SLASH, "/"), + Lexeme(TOKEN_IDENT, "d"), + Lexeme(TOKEN_PLUS, "+"), + Lexeme(TOKEN_IDENT, "c"), + Lexeme(TOKEN_RPARENS, ")"), + Lexeme(TOKEN_STAR, "*"), + Lexeme(TOKEN_NUMBER, "42"), + Lexeme(TOKEN_SEMI, ";") + ], + ); + + eprint!("Initializing tokeniser.. "); + let src = b"<<<=