init
This commit is contained in:
102
tok.h
Normal file
102
tok.h
Normal file
@@ -0,0 +1,102 @@
|
||||
#ifndef __TOK_H__
|
||||
#define __TOK_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <unistd.h>
|
||||
|
||||
typedef struct Type {
|
||||
enum {
|
||||
TypeVoid = 0,
|
||||
TypeFloat,
|
||||
TypeInt,
|
||||
} kind;
|
||||
|
||||
/*union {
|
||||
};*/
|
||||
} Type;
|
||||
|
||||
typedef struct Value {
|
||||
Type type;
|
||||
|
||||
union {
|
||||
double Float;
|
||||
ssize_t Int;
|
||||
};
|
||||
} Value;
|
||||
|
||||
enum Operator {
|
||||
OpLCurl = '{',
|
||||
OpRCurl = '}',
|
||||
OpLParen = '(',
|
||||
OpRParen = ')',
|
||||
OpComma = ',',
|
||||
OpAdd = '+',
|
||||
OpSub = '-',
|
||||
OpMul = '*',
|
||||
OpDiv = '/',
|
||||
OpBeginNonchars = 256,
|
||||
OpNewLn,
|
||||
OpEOF,
|
||||
OperatorEnumSize,
|
||||
};
|
||||
typedef enum Operator Operator;
|
||||
|
||||
#define PREC_DELIM -1
|
||||
extern int8_t op_prec[OperatorEnumSize];
|
||||
extern const char *op_str[OperatorEnumSize];
|
||||
|
||||
typedef struct Identifier {
|
||||
enum {
|
||||
IdentName,
|
||||
IdentAddr,
|
||||
} kind;
|
||||
|
||||
union {
|
||||
char *Name;
|
||||
size_t Addr;
|
||||
};
|
||||
} Identifier;
|
||||
|
||||
typedef struct Tok {
|
||||
size_t ln, col;
|
||||
|
||||
enum {
|
||||
TokOp,
|
||||
TokVal,
|
||||
TokIdent,
|
||||
TokAssign,
|
||||
TokDeclare,
|
||||
TokIf,
|
||||
TokWhile,
|
||||
TokKindEnumSize,
|
||||
} kind;
|
||||
|
||||
union {
|
||||
Operator Op;
|
||||
Value Val;
|
||||
Identifier Ident;
|
||||
};
|
||||
} Tok;
|
||||
|
||||
extern const char *tok_str[TokKindEnumSize];
|
||||
|
||||
typedef struct TokListItem {
|
||||
struct TokListItem *prev, *next;
|
||||
Tok tok;
|
||||
} TokListItem;
|
||||
|
||||
typedef struct TokList {
|
||||
TokListItem *begin, *end;
|
||||
TokListItem *mempools[32]; /* few mallocs, no copying => much speed */
|
||||
size_t mempool_sizes[32];
|
||||
size_t curr_mempool_cap;
|
||||
size_t curr_mempool;
|
||||
} TokList;
|
||||
|
||||
void toklist_init(TokList *l);
|
||||
void toklist_term(TokList *l);
|
||||
void toklist_append(TokList *l, Tok t);
|
||||
void toklist_del(TokList *l, TokListItem *from, TokListItem *to);
|
||||
void print_toks(TokList *l);
|
||||
|
||||
#endif /* TOK_H */
|
||||
Reference in New Issue
Block a user