New syntax that's easier to parse, parsing doesn't need variable lookup
This commit is contained in:
106
ast.h
Normal file
106
ast.h
Normal file
@@ -0,0 +1,106 @@
|
||||
typedef struct Decl_Enum_Child Decl_Enum_Child;
|
||||
typedef struct Typespec Typespec;
|
||||
typedef struct Decl Decl;
|
||||
typedef struct Note Note;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Type specifier
|
||||
//-----------------------------------------------------------------------------
|
||||
typedef enum Typespec_Kind{
|
||||
TS_None,
|
||||
TS_Name,
|
||||
TS_Pointer,
|
||||
TS_Array,
|
||||
TS_Function,
|
||||
TS_Struct,
|
||||
}Typespec_Kind;
|
||||
|
||||
struct Typespec{
|
||||
Typespec_Kind kind;
|
||||
Typespec *next;
|
||||
Token *pos;
|
||||
union{
|
||||
Intern_String name;
|
||||
Decl *struct_spec;
|
||||
struct{
|
||||
Typespec *first;
|
||||
Typespec *last;
|
||||
Typespec *ret;
|
||||
}function_spec;
|
||||
struct{
|
||||
Typespec *base;
|
||||
Expr *size;
|
||||
}array_spec;
|
||||
Typespec *base;
|
||||
};
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Notes
|
||||
//-----------------------------------------------------------------------------
|
||||
struct Note{
|
||||
Token *pos;
|
||||
Intern_String name;
|
||||
Expr *expr;
|
||||
|
||||
Note *next;
|
||||
Note *first;
|
||||
Note *last;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
typedef enum Decl_Kind{
|
||||
DECL_None,
|
||||
DECL_Struct,
|
||||
DECL_Union,
|
||||
DECL_Enum,
|
||||
DECL_Variable,
|
||||
DECL_Typedef,
|
||||
DECL_List,
|
||||
}Decl_Kind;
|
||||
|
||||
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;
|
||||
Intern_String name;
|
||||
Token *pos;
|
||||
Decl *next;
|
||||
|
||||
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;
|
||||
} struct_decl;
|
||||
struct{
|
||||
Typespec *type;
|
||||
Expr *expr;
|
||||
}variable_decl;
|
||||
struct{
|
||||
Typespec *type;
|
||||
}typedef_decl;
|
||||
struct{
|
||||
Decl *first;
|
||||
Decl *last;
|
||||
}list;
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user