130 lines
1.8 KiB
Go
130 lines
1.8 KiB
Go
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
|
|
}
|