first commit
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
|
||||
#ifndef ASTi_H
|
||||
#define ASTi_H
|
||||
#include "../utils/source.h"
|
||||
#include "AST.h"
|
||||
|
||||
typedef enum {
|
||||
NODE_EXPR,
|
||||
} NodeKind;
|
||||
|
||||
typedef enum {
|
||||
EXPR_POS,
|
||||
EXPR_NEG,
|
||||
EXPR_ADD,
|
||||
EXPR_SUB,
|
||||
EXPR_MUL,
|
||||
EXPR_DIV,
|
||||
EXPR_INT,
|
||||
EXPR_FLOAT,
|
||||
EXPR_STRING,
|
||||
EXPR_IDENT,
|
||||
} ExprKind;
|
||||
|
||||
typedef struct Node Node;
|
||||
|
||||
struct xAST {
|
||||
Source *src;
|
||||
Node *root;
|
||||
};
|
||||
|
||||
struct Node {
|
||||
NodeKind kind;
|
||||
Node *next;
|
||||
int offset,
|
||||
length;
|
||||
char body[];
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
Node base;
|
||||
ExprKind kind;
|
||||
char body[];
|
||||
} ExprNode;
|
||||
|
||||
typedef struct {
|
||||
ExprNode base;
|
||||
long long int val;
|
||||
} IntExprNode;
|
||||
|
||||
typedef struct {
|
||||
ExprNode base;
|
||||
double val;
|
||||
} FloatExprNode;
|
||||
|
||||
typedef struct {
|
||||
ExprNode base;
|
||||
char *val;
|
||||
int len;
|
||||
} StringExprNode;
|
||||
|
||||
typedef struct {
|
||||
ExprNode base;
|
||||
char *val;
|
||||
int len;
|
||||
} IdentExprNode;
|
||||
|
||||
typedef struct {
|
||||
ExprNode base;
|
||||
Node *head;
|
||||
int count;
|
||||
} OperExprNode;
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user