Files
Chloride/src/lexer/token.h
2025-07-14 04:51:00 +01:00

93 lines
1.7 KiB
C

/*
* SPDX-FileCopyrightText: 2025 William Bell
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
#ifndef TOKEN_H
#define TOKEN_H
#include <stddef.h>
typedef enum {
TOKEN_STRING = 256,
TOKEN_NUMBER,
TOKEN_IDENTIFIER,
TOKEN_KEYWORD,
TOKEN_NEW_LINE,
TOKEN_INDENT,
TOKEN_ASSIGN,
TOKEN_ASSIGN_PLUS,
TOKEN_ASSIGN_MINUS,
TOKEN_ASSIGN_FLOORDIV,
TOKEN_ASSIGN_SLASH,
TOKEN_ASSIGN_MODULO,
TOKEN_ASSIGN_STAR,
TOKEN_ASSIGN_CARET,
// Operators
TOKEN_CARET, // ^ (Exponentiation)
TOKEN_STAR, // * (Multiplication)
TOKEN_SLASH, // / (Division)
TOKEN_FLOORDIV, // // (Floor Division)
TOKEN_MODULO, // % (Modulo)
TOKEN_PLUS, // + (Addition)
TOKEN_MINUS, // - (Subtraction)
TOKEN_LT, // <
TOKEN_GT, // >
TOKEN_LE, // <=
TOKEN_GE, // >=
TOKEN_EQ, // ==
TOKEN_NE, // !=
TOKEN_NOT_IN, // not in
TOKEN_IN, // in
TOKEN_AND, // &&
TOKEN_OR, // ||
// Keywords
TOKEN_IF,
TOKEN_ELSE_IF,
TOKEN_ELSE,
TOKEN_WHILE,
TOKEN_FOREVER,
TOKEN_FOR,
TOKEN_BREAK,
TOKEN_CONTINUE,
TOKEN_RETURN,
TOKEN_LET,
TOKEN_IMPORT,
TOKEN_FROM,
TOKEN_DO,
TOKEN_TRUE,
TOKEN_FALSE,
TOKEN_NULL,
TOKEN_DELETE,
TOKEN_NOT,
TOKEN_TRY,
TOKEN_CATCH,
// parentheses, brackets, and braces
TOKEN_LPAREN, // (
TOKEN_RPAREN, // )
TOKEN_LBRACKET, // [
TOKEN_RBRACKET, // ]
TOKEN_LBRACE, // {
TOKEN_RBRACE, // }
TOKEN_DOT,
TOKEN_COMMA,
TOKEN_COLON,
TOKEN_EXCLAMATION,
TOKEN_INVALID,
} ArTokenType;
typedef struct {
ArTokenType type;
size_t line;
size_t column;
size_t length;
char *value;
} Token;
void free_token(void *ptr);
#endif