88 lines
1.2 KiB
C
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*); |