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
|
||
|
}
|