41 lines
824 B
Plaintext
41 lines
824 B
Plaintext
#foreign printf :: (str: String, ...)
|
|
|
|
Token :: struct
|
|
kind: U8
|
|
str: *U8
|
|
len: S64
|
|
|
|
Kind :: enum
|
|
Number
|
|
|
|
|
|
kind_name :: (kind: U8): String
|
|
if kind == Token.Kind.Number
|
|
return "<Number>"
|
|
else
|
|
return "<Unknown>"
|
|
|
|
is_numeric :: (c: U8): Bool
|
|
result := c >= '0 && c <= '9
|
|
return result
|
|
|
|
entry :: ()
|
|
string_to_lex := "Identifier 2425525 Not_Number"
|
|
token_array: [32]Token
|
|
token_count: S64 = 0
|
|
|
|
t: Token
|
|
for i := 0, i < string_to_lex.len, i+=1
|
|
if is_numeric(string_to_lex.str[i])
|
|
t.kind = Token.Kind.Number
|
|
t.str = &string_to_lex.str[i]
|
|
t.len = i
|
|
for is_numeric(string_to_lex.str[i])
|
|
i+=1
|
|
t.len = i - t.len
|
|
token_array[token_count++] = t
|
|
|
|
for i := 0, i < token_count, i++
|
|
tk := &token_array[i]
|
|
printf("%.*s", cast(tk.len: S32), tk.str)
|