Files
lambda/pkg/saccharine/ast.go
2025-12-26 03:37:05 -05:00

50 lines
1.2 KiB
Go

package saccharine
type Node interface {
Accept(Visitor)
}
/** ------------------------------------------------------------------------- */
type Abstraction struct {
Parameters []string
Body Node
}
type Application struct {
Abstraction Node
Arguments []Node
}
type Variable struct {
Name string
}
/** ------------------------------------------------------------------------- */
func NewAbstraction(parameter []string, body Node) *Abstraction {
return &Abstraction{Parameters: parameter, Body: body}
}
func NewApplication(abstraction Node, arguments []Node) *Application {
return &Application{Abstraction: abstraction, Arguments: arguments}
}
func NewVariable(name string) *Variable {
return &Variable{Name: name}
}
/** ------------------------------------------------------------------------- */
func (a *Abstraction) Accept(x Visitor) { x.VisitAbstraction(a) }
func (a *Application) Accept(x Visitor) { x.VisitApplication(a) }
func (v *Variable) Accept(x Visitor) { x.VisitVariable(v) }
/** ------------------------------------------------------------------------- */
type Visitor interface {
VisitAbstraction(*Abstraction)
VisitApplication(*Application)
VisitVariable(*Variable)
}