package main type PrimitiveType uint32 const ( Primitive_I8 PrimitiveType = iota Primitive_I16 Primitive_I32 Primitive_I64 Primitive_U8 Primitive_U16 Primitive_U32 Primitive_U64 ) type TypeType uint32 const ( Type_Primitive TypeType = iota Type_Named Type_Array Type_Tuple ) type Type struct { Type TypeType Value any } type NamedType struct { TypeName string } type ArrayType struct { ElementType Type } type TupleType struct { Types []Type } type StatementType uint32 const ( Statement_Expression StatementType = iota Statement_Block Statement_Return Statement_DeclareLocalVariable ) type Statement struct { Type StatementType Value any } type BlockStatement struct { Block Block } type ReturnStatement struct { Value *Expression } type DeclareLocalVariableStatement struct { Variable string Initializer Expression } type ExpressionType uint32 const ( Expression_Assignment ExpressionType = iota Expression_Literal Expression_VariableReference Expression_Arithmetic ) type Expression struct { Type ExpressionType Value any } type AssignmentExpression struct { Variable string Value Expression } type LiteralExpression struct { Type PrimitiveType Value any } type VariableReferenceExpression struct { Variable string } type ArithmeticOperation uint32 const ( Arithmetic_Add ArithmeticOperation = iota Arithmetic_Sub Arithmetic_Mul Arithmetic_Div Arithmetic_Mod ) type ArithmeticExpression struct { Operation ArithmeticOperation Left Expression Right Expression } type Block struct { Statements []Statement } type CompiledFunction struct { Parameters []Type ReturnValue Type Body Block } type CompiledFile struct { Functions []CompiledFunction } func compiler() (*CompiledFile, error) { return nil, nil }