71 lines
1.2 KiB
C
71 lines
1.2 KiB
C
#ifndef zre_lexer_h
|
|
#define zre_lexer_h
|
|
|
|
typedef enum {
|
|
TOKEN_EOF,
|
|
TOKEN_IDENTIFIER,
|
|
TOKEN_INT_LITERAL,
|
|
TOKEN_UINT_LITERAL,
|
|
TOKEN_FLOAT_LITERAL,
|
|
TOKEN_STRING_LITERAL,
|
|
TOKEN_TYPE_INT,
|
|
TOKEN_TYPE_NAT,
|
|
TOKEN_TYPE_REAL,
|
|
TOKEN_TYPE_STR,
|
|
TOKEN_KEYWORD_PLEX,
|
|
TOKEN_KEYWORD_FN,
|
|
TOKEN_KEYWORD_LET,
|
|
TOKEN_KEYWORD_CONST,
|
|
TOKEN_KEYWORD_IF,
|
|
TOKEN_KEYWORD_ELSE,
|
|
TOKEN_KEYWORD_WHILE,
|
|
TOKEN_KEYWORD_FOR,
|
|
TOKEN_KEYWORD_RETURN,
|
|
TOKEN_KEYWORD_USE,
|
|
TOKEN_KEYWORD_INIT,
|
|
TOKEN_KEYWORD_THIS,
|
|
TOKEN_KEYWORD_PRINT,
|
|
TOKEN_KEYWORD_NIL,
|
|
TOKEN_KEYWORD_TRUE,
|
|
TOKEN_KEYWORD_FALSE,
|
|
TOKEN_OPERATOR_IS,
|
|
TOKEN_OPERATOR_NOT,
|
|
TOKEN_OPERATOR_AND,
|
|
TOKEN_OPERATOR_OR,
|
|
TOKEN_BANG,
|
|
TOKEN_BANG_EQ,
|
|
TOKEN_EQ,
|
|
TOKEN_EQ_EQ,
|
|
TOKEN_GT,
|
|
TOKEN_LT,
|
|
TOKEN_GTE,
|
|
TOKEN_LTE,
|
|
TOKEN_DOT,
|
|
TOKEN_COMMA,
|
|
TOKEN_COLON,
|
|
TOKEN_SEMICOLON,
|
|
TOKEN_PLUS,
|
|
TOKEN_MINUS,
|
|
TOKEN_STAR,
|
|
TOKEN_SLASH,
|
|
TOKEN_LPAREN,
|
|
TOKEN_RPAREN,
|
|
TOKEN_LBRACE,
|
|
TOKEN_RBRACE,
|
|
TOKEN_LBRACKET,
|
|
TOKEN_RBRACKET,
|
|
TOKEN_ERROR
|
|
} TokenType;
|
|
|
|
typedef struct {
|
|
TokenType type;
|
|
const char *start;
|
|
int length;
|
|
int line;
|
|
} Token;
|
|
|
|
void initLexer(const char *source);
|
|
Token nextToken();
|
|
|
|
#endif
|