reality-engine/src/parser.h

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