add more tokens
This commit is contained in:
parent
9cb3331f60
commit
c0dc1361ae
|
|
@ -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 "<not a lexeme>", 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 "<identifier>"
|
||||
LEX_IDENT_len equ $ - LEX_IDENT
|
||||
LEX_NUMBER db "<number>"
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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<u8>, 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)]
|
||||
|
|
|
|||
|
|
@ -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"<<<=<a == b = c ||| &||&&|&";
|
||||
tokeniser_init_buf(src.as_ptr(), src.len());
|
||||
eprintln!("ok.");
|
||||
|
||||
assert_eq!(
|
||||
&collect_tokens()[..],
|
||||
&[
|
||||
Lexeme(TOKEN_LESSLESS, ""),
|
||||
Lexeme(TOKEN_LEQ, ""),
|
||||
Lexeme(TOKEN_LT, ""),
|
||||
Lexeme(TOKEN_IDENT, "a"),
|
||||
Lexeme(TOKEN_EQEQ, ""),
|
||||
Lexeme(TOKEN_IDENT, "b"),
|
||||
Lexeme(TOKEN_EQUALS, ""),
|
||||
Lexeme(TOKEN_IDENT, "c"),
|
||||
Lexeme(TOKEN_PIPE2, ""),
|
||||
Lexeme(TOKEN_PIPE, ""),
|
||||
Lexeme(TOKEN_AMP, ""),
|
||||
Lexeme(TOKEN_PIPE2, ""),
|
||||
Lexeme(TOKEN_AMP2, ""),
|
||||
Lexeme(TOKEN_PIPE, ""),
|
||||
Lexeme(TOKEN_AMP, ""),
|
||||
],
|
||||
);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue