- Feat: add example for wrapping dynamically linked library - Feat: add new tokens (import, extern, type, handle, struct, ref, out)
95 lines
2.1 KiB
C
95 lines
2.1 KiB
C
#ifndef FZL_TOKEN_H
|
|
#define FZL_TOKEN_H
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
// Token type
|
|
typedef enum
|
|
{
|
|
FZL_TOKTYPE_IMPORT, // `import`
|
|
FZL_TOKTYPE_EXTERN, // `extern`
|
|
FZL_TOKTYPE_TYPEDEF, // `type`
|
|
FZL_TOKTYPE_HANDLE, // `handle`
|
|
FZL_TOKTYPE_STRUCT, // `struct`
|
|
FZL_TOKTYPE_REFERENCE, // `ref`
|
|
FZL_TOKTYPE_OUT, // `out`
|
|
|
|
FZL_TOKTYPE_CLASS, // `class`
|
|
FZL_TOKTYPE_NEW, // `new`
|
|
|
|
FZL_TOKTYPE_FUNCTION, // `fn`
|
|
FZL_TOKTYPE_RETURN, // `return`
|
|
|
|
FZL_TOKTYPE_FOR, // `for`
|
|
FZL_TOKTYPE_WHILE, // `while`
|
|
FZL_TOKTYPE_BREAK, // `break`
|
|
|
|
FZL_TOKTYPE_IF, // `if`
|
|
FZL_TOKTYPE_ELSE, // `else`
|
|
|
|
FZL_TOKTYPE_NAME, // abc
|
|
FZL_TOKTYPE_TYPE, // i16
|
|
|
|
FZL_TOKTYPE_DDASH, // `//` :D
|
|
|
|
FZL_TOKTYPE_LPAREN, // `(`
|
|
FZL_TOKTYPE_RPAREN, // `)`
|
|
FZL_TOKTYPE_LBRACE, // `{`
|
|
FZL_TOKTYPE_RBRACE, // `}`
|
|
|
|
FZL_TOKTYPE_COMMA, // `,`
|
|
FZL_TOKTYPE_DOT, // `.`
|
|
FZL_TOKTYPE_SEMICOLON, // `;`
|
|
|
|
FZL_TOKTYPE_STR_LITERAL, // ""
|
|
FZL_TOKTYPE_NUM_LITERAL, // 123
|
|
FZL_TOKTYPE_BOOL_LITERAL, // true
|
|
FZL_TOKTYPE_NULL_LITERAL, // null
|
|
|
|
FZL_TOKTYPE_STR_FORMAT_START, // `$` before `"`
|
|
FZL_TOKTYPE_STR_FORMAT_END, // end of string formatting sequence
|
|
|
|
FZL_TOKTYPE_DAMPERSAND, // `&&`
|
|
FZL_TOKTYPE_DVBAR, // `||`
|
|
|
|
FZL_TOKTYPE_EQEQ, // `==`
|
|
FZL_TOKTYPE_REQ, // `>=`
|
|
FZL_TOKTYPE_LEQ, // `<=`
|
|
FZL_TOKTYPE_NEQ, // `!=`
|
|
FZL_TOKTYPE_LANGLE, // `<`
|
|
FZL_TOKTYPE_RANGLE, // `>`
|
|
FZL_TOKTYPE_NOT, // `!`
|
|
|
|
FZL_TOKTYPE_STAR, // `*`
|
|
FZL_TOKTYPE_SLASH, // `/`
|
|
FZL_TOKTYPE_PLUS, // `+`
|
|
FZL_TOKTYPE_MINUS, // `-`
|
|
FZL_TOKTYPE_CARET, // `^`
|
|
FZL_TOKTYPE_PERCENT, // `%`
|
|
|
|
FZL_TOKTYPE_EQ // `=`
|
|
} fzl_toktype_t;
|
|
|
|
// Token descriptor
|
|
typedef struct
|
|
{
|
|
fzl_toktype_t type;
|
|
size_t ln;
|
|
size_t cn;
|
|
bool store_value;
|
|
void *value;
|
|
uint16_t value_sz;
|
|
char *filename;
|
|
} fzl_token_t;
|
|
|
|
// Allocate new token
|
|
fzl_token_t *fzl_mktoken(const fzl_toktype_t type, size_t line, size_t col,
|
|
void *value, size_t value_sz, char *filename);
|
|
|
|
// Free token and its contents
|
|
void fzl_freetoken(fzl_token_t *token);
|
|
|
|
#endif // FZL_TOKEN_H
|