119 lines
1.7 KiB
C
119 lines
1.7 KiB
C
#ifndef ZRE_PARSER_H
|
|
#define ZRE_PARSER_H
|
|
|
|
#include "common.h"
|
|
#include <string.h>
|
|
|
|
typedef enum TokenType
|
|
{
|
|
/* Single char tokens */
|
|
TOKEN_LEFT_PAREN,
|
|
TOKEN_RIGHT_PAREN,
|
|
TOKEN_LEFT_BRACE,
|
|
TOKEN_RIGHT_BRACE,
|
|
TOKEN_SEMICOLON,
|
|
TOKEN_EQUALS,
|
|
TOKEN_DOT,
|
|
/* Literals */
|
|
TOKEN_IDENTIFIER,
|
|
TOKEN_STRING,
|
|
TOKEN_FLOAT,
|
|
TOKEN_U8,
|
|
TOKEN_I8,
|
|
TOKEN_U16,
|
|
TOKEN_I16,
|
|
TOKEN_U64,
|
|
TOKEN_I64,
|
|
TOKEN_INT,
|
|
TOKEN_UINT,
|
|
/* TOKEN_ARRAY, */
|
|
/* TOKEN_MAP, */
|
|
TOKEN_FALSE,
|
|
TOKEN_TRUE,
|
|
TOKEN_NULL,
|
|
TOKEN_EOF,
|
|
TOKEN_ERROR,
|
|
/* Operators */
|
|
TOKEN_ADD,
|
|
TOKEN_SUB,
|
|
TOKEN_MUL,
|
|
TOKEN_DIV,
|
|
TOKEN_MOD,
|
|
TOKEN_GT,
|
|
TOKEN_LT,
|
|
TOKEN_EQ,
|
|
TOKEN_GE,
|
|
TOKEN_LE,
|
|
TOKEN_NE,
|
|
TOKEN_AND,
|
|
TOKEN_OR,
|
|
TOKEN_XOR,
|
|
TOKEN_SHIFTRIGHT,
|
|
TOKEN_SHIFTLEFT,
|
|
/* Keywords */
|
|
TOKEN_FN,
|
|
TOKEN_TO,
|
|
TOKEN_IN,
|
|
TOKEN_IS,
|
|
TOKEN_AS,
|
|
TOKEN_USE,
|
|
TOKEN_IF,
|
|
TOKEN_ELSE,
|
|
TOKEN_DEFAULT,
|
|
TOKEN_FOR,
|
|
TOKEN_TRY,
|
|
TOKEN_CATCH,
|
|
TOKEN_WHILE,
|
|
TOKEN_DO,
|
|
TOKEN_EXIT,
|
|
TOKEN_SWITCH,
|
|
TOKEN_RETURN,
|
|
TOKEN_CONST,
|
|
TOKEN_TYPE,
|
|
TOKEN_THIS,
|
|
TOKEN_YIELD,
|
|
TOKEN_CASE,
|
|
TOKEN_ASSERT,
|
|
TOKEN_BREAK,
|
|
TOKEN_LET,
|
|
TOKEN_PRINT,
|
|
TOKEN_TO_S,
|
|
} TokenType;
|
|
|
|
#define PRINT_TOKEN_CASE(token_suffix) \
|
|
case token_suffix: \
|
|
printf("" #token_suffix " %s line_no=%d\n", str, t.line); \
|
|
break;
|
|
|
|
typedef struct Token Token;
|
|
struct Token
|
|
{
|
|
TokenType type;
|
|
char *start;
|
|
int32_t length;
|
|
int32_t line;
|
|
};
|
|
|
|
typedef struct SourceCode SourceCode;
|
|
struct SourceCode
|
|
{
|
|
size_t size;
|
|
char *buf;
|
|
int count;
|
|
};
|
|
|
|
typedef struct TokenMap TokenMap;
|
|
struct TokenMap
|
|
{
|
|
struct TokenMap* next;
|
|
char* keyword;
|
|
TokenType token;
|
|
};
|
|
|
|
void initTokenMap();
|
|
void initTokenizer (char *src);
|
|
void printToken (Token t);
|
|
Token nextToken();
|
|
|
|
#endif
|