New approach, new lexer
This commit is contained in:
225
generated_ast.h
Normal file
225
generated_ast.h
Normal file
@@ -0,0 +1,225 @@
|
||||
|
||||
typedef struct Typespec Typespec;
|
||||
|
||||
typedef struct Note Note;
|
||||
|
||||
|
||||
|
||||
typedef struct Decl_Function_Arg Decl_Function_Arg;
|
||||
|
||||
typedef struct Decl_Enum_Child Decl_Enum_Child;
|
||||
|
||||
typedef struct Decl Decl;
|
||||
|
||||
|
||||
typedef struct Stmt_If Stmt_If;
|
||||
|
||||
typedef struct Stmt Stmt;
|
||||
|
||||
|
||||
typedef struct Pointer Pointer;
|
||||
|
||||
typedef struct Pointer_Bucket Pointer_Bucket;
|
||||
|
||||
typedef struct Pointer_Array Pointer_Array;
|
||||
|
||||
|
||||
|
||||
typedef enum Typespec_Kind{
|
||||
TS_None,
|
||||
TS_Name,
|
||||
TS_Pointer,
|
||||
TS_Array,
|
||||
TS_Function,
|
||||
}Typespec_Kind;
|
||||
|
||||
struct Typespec{
|
||||
Typespec_Kind kind;
|
||||
Typespec (*next);
|
||||
Token (*pos);
|
||||
union{
|
||||
Intern_String name;
|
||||
Typespec (*base);
|
||||
struct{
|
||||
Typespec (*first);
|
||||
Typespec (*last);
|
||||
Typespec (*ret);
|
||||
}function_spec;
|
||||
struct{
|
||||
Typespec (*base);
|
||||
Expr (*size);
|
||||
}array_spec;
|
||||
};
|
||||
};
|
||||
|
||||
struct Note{
|
||||
Token (*pos);
|
||||
Intern_String name;
|
||||
Expr (*expr);
|
||||
Note (*next);
|
||||
Note (*first);
|
||||
Note (*last);
|
||||
};
|
||||
|
||||
typedef enum Decl_Kind{
|
||||
DECL_None,
|
||||
DECL_Struct,
|
||||
DECL_Union,
|
||||
DECL_Enum,
|
||||
DECL_Variable,
|
||||
DECL_Typedef,
|
||||
DECL_Function,
|
||||
DECL_List,
|
||||
}Decl_Kind;
|
||||
|
||||
typedef enum Decl_Struct_Kind{
|
||||
STRUCT_Nested,
|
||||
STRUCT_Base,
|
||||
}Decl_Struct_Kind;
|
||||
|
||||
struct Decl_Function_Arg{
|
||||
Decl_Function_Arg (*next);
|
||||
Intern_String name;
|
||||
Token (*pos);
|
||||
Typespec (*typespec);
|
||||
};
|
||||
|
||||
struct Decl_Enum_Child{
|
||||
Decl_Enum_Child (*next);
|
||||
Intern_String name;
|
||||
Token (*pos);
|
||||
Expr (*expr);
|
||||
Note (*first_note);
|
||||
Note (*last_note);
|
||||
};
|
||||
|
||||
struct Decl{
|
||||
Decl_Kind kind;
|
||||
Decl (*next);
|
||||
Intern_String name;
|
||||
Token (*pos);
|
||||
Note (*first_note);
|
||||
Note (*last_note);
|
||||
union{
|
||||
struct{
|
||||
Decl_Enum_Child (*first);
|
||||
Decl_Enum_Child (*last);
|
||||
Typespec (*typespec);
|
||||
}enum_decl;
|
||||
struct{
|
||||
Decl (*first);
|
||||
Decl (*last);
|
||||
Decl_Struct_Kind kind;
|
||||
}struct_decl;
|
||||
struct{
|
||||
Typespec (*type);
|
||||
Expr (*expr);
|
||||
}variable_decl;
|
||||
struct{
|
||||
Typespec (*type);
|
||||
}typedef_decl;
|
||||
struct{
|
||||
Decl_Function_Arg (*first);
|
||||
Decl_Function_Arg (*last);
|
||||
Typespec (*ret);
|
||||
Stmt (*body);
|
||||
}function_decl;
|
||||
struct{
|
||||
Decl (*first);
|
||||
Decl (*last);
|
||||
}list;
|
||||
};
|
||||
};
|
||||
|
||||
typedef enum Stmt_Kind{
|
||||
STMT_None,
|
||||
STMT_Decl,
|
||||
STMT_Expr,
|
||||
STMT_List,
|
||||
STMT_Return,
|
||||
STMT_If,
|
||||
STMT_For,
|
||||
}Stmt_Kind;
|
||||
|
||||
struct Stmt_If{
|
||||
Stmt_If (*next);
|
||||
Expr (*cond);
|
||||
Stmt (*body);
|
||||
};
|
||||
|
||||
struct Stmt{
|
||||
Stmt_Kind kind;
|
||||
Stmt (*next);
|
||||
Token (*pos);
|
||||
union{
|
||||
Stmt_If stmt_if;
|
||||
Decl (*decl);
|
||||
Expr (*expr);
|
||||
struct{
|
||||
Stmt (*first);
|
||||
Stmt (*last);
|
||||
}list;
|
||||
struct{
|
||||
Expr (*expr);
|
||||
}ret;
|
||||
};
|
||||
};
|
||||
|
||||
typedef enum Pointer_Kind{
|
||||
PK_None,
|
||||
PK_Typespec,
|
||||
PK_Expr,
|
||||
PK_Decl,
|
||||
PK_Stmt,
|
||||
PK_Enum_Child,
|
||||
PK_Func_Arg,
|
||||
PK_Intern_String,
|
||||
}Pointer_Kind;
|
||||
|
||||
struct Pointer{
|
||||
Pointer_Kind kind;
|
||||
union{
|
||||
Typespec (*typespec);
|
||||
Decl (*decl);
|
||||
Expr (*expr);
|
||||
Stmt (*stmt);
|
||||
Decl_Function_Arg (*func_arg);
|
||||
Decl_Enum_Child (*enum_child);
|
||||
Intern_String (*string);
|
||||
};
|
||||
};
|
||||
|
||||
struct Pointer_Bucket{
|
||||
Pointer_Bucket (*next);
|
||||
Pointer (data[4096]);
|
||||
};
|
||||
|
||||
struct Pointer_Array{
|
||||
Pointer_Bucket first;
|
||||
Pointer_Bucket (*last);
|
||||
S64 len;
|
||||
S64 block;
|
||||
Arena (*arena);
|
||||
Pointer_Bucket (*iter_bucket);
|
||||
S64 iter_len;
|
||||
S64 iter_block;
|
||||
};
|
||||
|
||||
typedef enum Gather_Flag{
|
||||
GATHER_None = 0,
|
||||
GATHER_Typespec = 1,
|
||||
GATHER_Expr = 2,
|
||||
GATHER_Decl = 4,
|
||||
GATHER_Stmt = 8,
|
||||
GATHER_Enum_Child = 16,
|
||||
GATHER_Func_Arg = 32,
|
||||
}Gather_Flag;
|
||||
|
||||
typedef enum Traversal_Flag{
|
||||
TRAVERS_None,
|
||||
TRAVERS_Typespec = 1,
|
||||
TRAVERS_Expr = 2,
|
||||
TRAVERS_Stmt = 8,
|
||||
TRAVERS_All = ((TRAVERS_Typespec|TRAVERS_Expr)|TRAVERS_Stmt),
|
||||
}Traversal_Flag;
|
||||
|
||||
Reference in New Issue
Block a user