sic

The sic programming language, compiler and tools (WIP)
Log | Files | Refs

common.h (788B)


      1 #pragma once
      2 
      3 #include <stdbool.h>
      4 #include <stddef.h>
      5 
      6 typedef enum TokenType {
      7 	TERMINUS = 4,
      8 	IDENT,
      9 	KEYWORD,
     10 	SYMBOL,
     11 	PLUS,
     12 	MIN,
     13 	STAR,
     14 	SLASH,
     15 	BACKSLASH,
     16 	PERCENT,
     17 	LBRACE,
     18 	RBRACE,
     19 	LPAREN,
     20 	RPAREN,
     21 	EQ_EQ,
     22 	BANG_EQ,
     23 	EQ_GT,
     24 	LT_EQ,
     25 	LT_DASH,
     26 	DASH_GT,
     27 	EQ,
     28 	BANG,
     29 	NAMESPACE
     30 } TokenType;
     31 
     32 typedef enum Keyword { IF = 130, ELSE, WHILE, OPT, LAZY, MATCH, DEF, FOR, EACH, SOME, NONE, OK, ERR, IN, IS, CAST } Keyword;
     33 
     34 typedef struct Token {
     35 	TokenType type;
     36 	union Value {
     37 		char* as_string;
     38 		char as_char;
     39 		size_t as_int;
     40 		bool as_bool;
     41 	} value;
     42 	const char* path;
     43 	const char* filename;
     44 	size_t line;
     45 	size_t col;
     46 } Token;
     47 
     48 typedef struct Lexer {
     49 	const char* code;
     50 	const char* path;
     51 	const char* filename;
     52 	size_t pos;
     53 	Token* tokens;
     54 	size_t count;
     55 	size_t cap;
     56 } Lexer;