feat: implement conditions
This commit is contained in:
@@ -12,6 +12,7 @@ typedef enum
|
||||
FZL_NODETYPE_CALL,
|
||||
FZL_NODETYPE_LITERAL,
|
||||
FZL_NODETYPE_IDENTIFIER,
|
||||
FZL_NODETYPE_CONDITIONAL,
|
||||
|
||||
FZL_NODETYPE_ADD,
|
||||
FZL_NODETYPE_SUB,
|
||||
@@ -23,6 +24,18 @@ typedef enum
|
||||
FZL_NODETYPE_UNARY_PLUS,
|
||||
FZL_NODETYPE_UNARY_MINUS,
|
||||
|
||||
FZL_NODETYPE_OR,
|
||||
FZL_NODETYPE_AND,
|
||||
|
||||
FZL_NODETYPE_EQUAL,
|
||||
FZL_NODETYPE_NEQUAL,
|
||||
FZL_NODETYPE_LESS,
|
||||
FZL_NODETYPE_LESS_EQUAL,
|
||||
FZL_NODETYPE_GREATER,
|
||||
FZL_NODETYPE_GREATER_EQUAL,
|
||||
|
||||
FZL_NODETYPE_NOT,
|
||||
|
||||
FZL_NODETYPE_DECLARATION,
|
||||
FZL_NODETYPE_ASSIGN
|
||||
} fzl_nodetype_t;
|
||||
@@ -72,6 +85,14 @@ typedef struct fzl_node
|
||||
fzl_token_t *type;
|
||||
struct fzl_node *identifier;
|
||||
} var;
|
||||
|
||||
// Conditional blocks
|
||||
struct
|
||||
{
|
||||
struct fzl_node *condition;
|
||||
struct fzl_node *true_block;
|
||||
struct fzl_node *else_block;
|
||||
} cond;
|
||||
};
|
||||
} fzl_node_t;
|
||||
|
||||
|
||||
@@ -8,17 +8,35 @@
|
||||
// Token type
|
||||
typedef enum
|
||||
{
|
||||
FZL_TOKTYPE_IF, // if
|
||||
FZL_TOKTYPE_ELSE, // else
|
||||
|
||||
FZL_TOKTYPE_NAME, // abc
|
||||
FZL_TOKTYPE_TYPE, // i16
|
||||
|
||||
FZL_TOKTYPE_LPAREN, // (
|
||||
FZL_TOKTYPE_RPAREN, // )
|
||||
FZL_TOKTYPE_LBRACE, // {
|
||||
FZL_TOKTYPE_RBRACE, // }
|
||||
|
||||
FZL_TOKTYPE_COMMA, // ,
|
||||
FZL_TOKTYPE_DOT, // .
|
||||
FZL_TOKTYPE_COMMA, // ,
|
||||
FZL_TOKTYPE_DOT, // .
|
||||
FZL_TOKTYPE_SEMICOLON, // ;
|
||||
|
||||
FZL_TOKTYPE_STR_LITERAL, // ""
|
||||
FZL_TOKTYPE_NUM_LITERAL, // 123
|
||||
FZL_TOKTYPE_STR_LITERAL, // ""
|
||||
FZL_TOKTYPE_NUM_LITERAL, // 123
|
||||
FZL_TOKTYPE_BOOL_LITERAL, // true
|
||||
|
||||
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, // /
|
||||
|
||||
@@ -30,6 +30,9 @@ typedef struct
|
||||
|
||||
fzl_symtable_t *syms[64];
|
||||
size_t sym_top;
|
||||
|
||||
size_t bp_table[64];
|
||||
size_t bp_top;
|
||||
} fzl_walker_t;
|
||||
|
||||
// Allocate new walker
|
||||
|
||||
Reference in New Issue
Block a user