impotent/lexer.h
2025-09-03 01:03:45 +03:00

88 lines
1.2 KiB
C

#pragma once
#include<stdbool.h>
#include<stdint.h>
#include<stddef.h>
#include<ctype.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
typedef enum TokenType {
TOK_NONE,
TOK_INVALID,
TOK_SEMICOLON,
TOK_EQUAL,
TOK_BREAK,
TOK_GOTO,
TOK_DO,
TOK_END,
TOK_WHILE,
TOK_REPEAT,
TOK_UNTIL,
TOK_IF,
TOK_THEN,
TOK_ELSEIF,
TOK_ELSE,
TOK_FOR,
TOK_COMMA,
TOK_IN,
TOK_FUNCTION,
TOK_LOCAL,
TOK_DOUBLE_COLON,
TOK_DOT,
TOK_COLON,
TOK_SQUAREN_L,
TOK_SQUAREN_R,
TOK_NIL,
TOK_TRUE,
TOK_FALSE,
TOK_ELLIPSIS,
TOK_PAREN_L,
TOK_PAREN_R,
TOK_SQUIGGLY_L,
TOK_SQUIGGLY_R,
TOK_PLUS,
TOK_MINUS,
TOK_MUL,
TOK_DIV,
TOK_IDIV,
TOK_CARET,
TOK_PERCENT,
TOK_AMPERSAND,
TOK_TILDE,
TOK_BAR,
TOK_DOUBLE_RIGHT,
TOK_DOUBLE_LEFT,
TOK_DOUBLE_DOT,
TOK_LEFT,
TOK_RIGHT,
TOK_LEFT_EQUAL,
TOK_RIGHT_EQUAL,
TOK_DOUBLE_EQUAL,
TOK_NOT_EQUAL,
TOK_AND,
TOK_OR,
TOK_NOT,
TOK_SHARP,
TOK_NAME,
TOK_RETURN,
TOK_NUMBER,
TOK_STRING,
TOK_EOF,
} TokenType;
typedef struct Token {
TokenType type;
int row;
char *text;
} Token;
#define i_header
#define T vec_Token, Token
#include"stc/vec.h"
#undef i_header
vec_Token ltokenize(const char *buf, size_t len);
void lfreetoks(vec_Token*);