sic

The sic programming language
Log | Files | Refs

commit 64903e2e887e33cf2f2d0683c4a51fa91d5c45e2
parent 3b5b1e25c827f153004c3b74b2a9c10538ed0909
Author: keyle <keyle@capsule.org>
Date:   Sat,  9 May 2026 16:58:33 +1000

lexer wip

Diffstat:
Mmakefile | 3++-
Msrc/common.h | 59+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/lexer.c | 6++++++
Msrc/lexer.h | 4++++
4 files changed, 71 insertions(+), 1 deletion(-)

diff --git a/makefile b/makefile @@ -1,5 +1,6 @@ cmp = clang -warn = -Wall -Wextra -Werror +warn = -Wall -Wextra +pedantic = -Werror release = -02 sane = -fsanitize=address cfiles = src/**.c diff --git a/src/common.h b/src/common.h @@ -1 +1,60 @@ #pragma once + +typedef enum TokenType { + TERMINUS = 4, + IDENT, + KEYWORD, + SYMBOL, + PLUS, + MIN, + STAR, + SLASH, + BACKSLASH, + PERCENT, + LBRACE, + RBRACE, + LPAREN, + RPAREN, + EQ_EQ, + BANG_EQ, + EQ_GT, + LT_EQ, + LT_DASH, + DASH_GT, + EQ, + BANG, + NAMESPACE +} TokenType; + +typedef enum Keyword { + IF = 130, + ELSE, + WHILE, + OPT, + LAZY, + MATCH, + DEF, + FOR, + EACH, + SOME, + NONE, + OK, + ERR, + IN, + IS, + CAST +} Keyword; + +typedef struct Token { + TokenType type; + union Value { + char* as_string; + char as_char; + int as_int; + int as_bool; + } Value; + const char* path; + const char* filename; + int line; + int col; +} Token; diff --git a/src/lexer.c b/src/lexer.c @@ -0,0 +1,6 @@ +#include "lexer.h" + +Token* lex(const char* code, const char* path, const char* filename) { + Token* t = {}; + return t; +} diff --git a/src/lexer.h b/src/lexer.h @@ -1 +1,5 @@ #pragma once + +#include "common.h" + +Token* lex(const char* code, const char* path, const char* filename);