code wiki / (root) / nx_nlex_test.nx

nx_nlex_test.nx source

↩ module page · 91 lines · 2785 B

1// Test the NishiLang-in-NishiLang tokenizer on a small program. 2 3import "syscalls.nx" 4import "nx_nlex.nx" 5 6func write_str(buf: *u8, off: i64, s0: i64, n: i64) -> i64 { 7 buf[off] = s0 as u8 8 return 0 9} 10 11func main() -> i64 { 12 // Source: `func main() -> i64 { return 42 }` 13 let src: *u8 = sys_mmap(64) 14 src[0] = 102 as u8 // f 15 src[1] = 117 as u8 // u 16 src[2] = 110 as u8 // n 17 src[3] = 99 as u8 // c 18 src[4] = 32 as u8 // space 19 src[5] = 109 as u8 // m 20 src[6] = 97 as u8 // a 21 src[7] = 105 as u8 // i 22 src[8] = 110 as u8 // n 23 src[9] = 40 as u8 // ( 24 src[10] = 41 as u8 // ) 25 src[11] = 32 as u8 // space 26 src[12] = 45 as u8 // - 27 src[13] = 62 as u8 // > 28 src[14] = 32 as u8 // space 29 src[15] = 105 as u8 // i 30 src[16] = 54 as u8 // 6 31 src[17] = 52 as u8 // 4 32 src[18] = 32 as u8 // space 33 src[19] = 123 as u8 // { 34 src[20] = 32 as u8 // space 35 src[21] = 114 as u8 // r 36 src[22] = 101 as u8 // e 37 src[23] = 116 as u8 // t 38 src[24] = 117 as u8 // u 39 src[25] = 114 as u8 // r 40 src[26] = 110 as u8 // n 41 src[27] = 32 as u8 // space 42 src[28] = 52 as u8 // 4 43 src[29] = 50 as u8 // 2 44 src[30] = 32 as u8 // space 45 src[31] = 125 as u8 // } 46 47 let l: *NxNLexer = nx_nlex_new(src, 32, 32) 48 let n: i64 = nx_nlex_run(l) 49 50 // Expected tokens: FUNC IDENT(main) LPAREN RPAREN ARROW IDENT(i64) LBRACE RETURN INT(42) RBRACE EOF 51 // That's 11 tokens. 52 if n != 11 { return 10 } 53 54 let t0: *NxToken = nx_nlex_token_at(l, 0) 55 if t0.kind != NX_TOK_FUNC { return 11 } 56 57 let t1: *NxToken = nx_nlex_token_at(l, 1) 58 if t1.kind != NX_TOK_IDENT { return 12 } 59 if t1.len != 4 { return 13 } // "main" 60 61 let t2: *NxToken = nx_nlex_token_at(l, 2) 62 if t2.kind != NX_TOK_LPAREN { return 14 } 63 64 let t3: *NxToken = nx_nlex_token_at(l, 3) 65 if t3.kind != NX_TOK_RPAREN { return 15 } 66 67 let t4: *NxToken = nx_nlex_token_at(l, 4) 68 if t4.kind != NX_TOK_ARROW { return 16 } 69 70 let t5: *NxToken = nx_nlex_token_at(l, 5) 71 if t5.kind != NX_TOK_IDENT { return 17 } 72 if t5.len != 3 { return 18 } // "i64" 73 74 let t6: *NxToken = nx_nlex_token_at(l, 6) 75 if t6.kind != NX_TOK_LBRACE { return 19 } 76 77 let t7: *NxToken = nx_nlex_token_at(l, 7) 78 if t7.kind != NX_TOK_RETURN { return 20 } 79 80 let t8: *NxToken = nx_nlex_token_at(l, 8) 81 if t8.kind != NX_TOK_INT { return 21 } 82 if t8.int_val != 42 { return 22 } 83 84 let t9: *NxToken = nx_nlex_token_at(l, 9) 85 if t9.kind != NX_TOK_RBRACE { return 23 } 86 87 let t10: *NxToken = nx_nlex_token_at(l, 10) 88 if t10.kind != NX_TOK_EOF { return 24 } 89 90 return 0 91}