Swinging in a different direction, different syntax
This commit is contained in:
141
ast.h
141
ast.h
@@ -1,9 +1,142 @@
|
||||
#if 0
|
||||
|
||||
|
||||
String:struct{
|
||||
str: U8*;
|
||||
len: S64;
|
||||
}
|
||||
Intern_String:typedef String;
|
||||
|
||||
Token_Kind:enum{
|
||||
@str="End of stream" End,
|
||||
@str="*" Mul,
|
||||
@str="/" Div,
|
||||
@str="+" Add,
|
||||
@str="-" Sub,
|
||||
@str="%" Mod,
|
||||
@str="&" BitAnd,
|
||||
@str="|" BitOr,
|
||||
@str="^" BitXor,
|
||||
@str="~" Neg,
|
||||
@str="!" Not,
|
||||
@str="(" OpenParen,
|
||||
@str=" " CloseParen,
|
||||
@str="{" OpenBrace,
|
||||
@str="}" CloseBrace,
|
||||
@str="[" OpenBracket,
|
||||
@str="]" CloseBracket,
|
||||
@str="," Comma,
|
||||
@str="#" Pound,
|
||||
@str="?" Question,
|
||||
@str="..." ThreeDots,
|
||||
@str=";" Semicolon,
|
||||
@str="." Dot,
|
||||
@str="<" LesserThen,
|
||||
@str=">" GreaterThen,
|
||||
@str=":" Colon,
|
||||
@str="=" Assign,
|
||||
@str="/=" DivAssign,
|
||||
@str="*=" MulAssign,
|
||||
@str="%=" ModAssign,
|
||||
@str="-=" SubAssign,
|
||||
@str="+=" AddAssign,
|
||||
@str="&=" AndAssign,
|
||||
@str="|=" OrAssign,
|
||||
@str="^=" XorAssign,
|
||||
@str="<<=" LeftShiftAssign,
|
||||
@str=">>=" RightShiftAssign,
|
||||
@str="::" DoubleColon,
|
||||
@str="@" At,
|
||||
@str="--" Decrement,
|
||||
@str="++" Increment,
|
||||
@str="--" PostDecrement,
|
||||
@str="++" PostIncrement,
|
||||
@str="<=" LesserThenOrEqual,
|
||||
@str=">=" GreaterThenOrEqual,
|
||||
@str="==" Equals,
|
||||
@str="&&" And,
|
||||
@str="||" Or,
|
||||
@str="!=" NotEquals,
|
||||
@str="<<" LeftShift,
|
||||
@str=">>" RightShift,
|
||||
@str="->" Arrow,
|
||||
@str="sizeof" ExprSizeof,
|
||||
DocComment,
|
||||
Comment,
|
||||
Identifier,
|
||||
StringLit,
|
||||
U8Lit,
|
||||
Character,
|
||||
Error,
|
||||
Float,
|
||||
Int,
|
||||
Keyword,
|
||||
}
|
||||
|
||||
|
||||
Token:struct{
|
||||
kind:Token_Kind;
|
||||
union:{
|
||||
string:String;
|
||||
struct:{str:U8*; len:U64;}
|
||||
}
|
||||
union:{
|
||||
int_val:S64;
|
||||
error_val:String;
|
||||
intern_val:Intern_String;
|
||||
}
|
||||
file:String;
|
||||
line:S64;
|
||||
line_begin:U8*;
|
||||
}
|
||||
|
||||
|
||||
AST_Kind:enum{
|
||||
BaseType,
|
||||
Typedef,
|
||||
Enum,
|
||||
Struct,
|
||||
Union,
|
||||
|
||||
Note,
|
||||
List,
|
||||
|
||||
Pointer,
|
||||
Array,
|
||||
Function,
|
||||
Variable,
|
||||
EnumChild,
|
||||
}
|
||||
|
||||
AST_Node:struct{
|
||||
kind: AST_Kind;
|
||||
node: AST_Node[16];
|
||||
|
||||
next: AST_Node*;
|
||||
next_scope: AST_Node*;
|
||||
|
||||
first_note: AST_Node*;
|
||||
last_note: AST_Node*;
|
||||
|
||||
first_child: AST_Node*;
|
||||
last_child: AST_Node*;
|
||||
union:{
|
||||
base_type_size: SizeU;
|
||||
pointer: AST_Node*;
|
||||
typedef_type: AST_Node*;
|
||||
variable_type: AST_Node*;
|
||||
func_return_type: AST_Node*;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
typedef struct AST_Node AST_Node;
|
||||
typedef struct Expr Expr;
|
||||
|
||||
typedef enum AST_Kind{
|
||||
AK_None,
|
||||
AK_Undefined,
|
||||
|
||||
AK_BaseType,
|
||||
AK_Typedef,
|
||||
@@ -19,7 +152,6 @@ typedef enum AST_Kind{
|
||||
AK_Function,
|
||||
AK_Variable,
|
||||
AK_EnumChild,
|
||||
|
||||
}AST_Kind;
|
||||
|
||||
struct AST_Node{
|
||||
@@ -29,7 +161,7 @@ struct AST_Node{
|
||||
Intern_String name;
|
||||
|
||||
AST_Node *next;
|
||||
AST_Node *scope_next;
|
||||
AST_Node *next_scope;
|
||||
|
||||
AST_Node *first_note;
|
||||
AST_Node *last_note;
|
||||
@@ -37,9 +169,10 @@ struct AST_Node{
|
||||
AST_Node *first_child;
|
||||
AST_Node *last_child;
|
||||
union{
|
||||
AST_Node *pointer;
|
||||
SizeU base_type_size;
|
||||
AST_Node *pointer;
|
||||
AST_Node *typedef_type;
|
||||
AST_Node *variable_type;
|
||||
AST_Node *func_return_type;
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user