Files
lambda/pkg/saccharine/stringify.go
2025-12-27 01:18:06 -05:00

32 lines
717 B
Go

package saccharine
import (
"strings"
"git.maximhutz.com/max/lambda/pkg/saccharine/ast"
)
type stringifyVisitor struct{}
func (v stringifyVisitor) VisitAtom(n *ast.Atom) string {
return n.Name
}
func (v stringifyVisitor) VisitAbstraction(n *ast.Abstraction) string {
return "\\" + strings.Join(n.Parameters, " ") + "." + ast.Visit(v, n.Body)
}
func (v stringifyVisitor) VisitApplication(n *ast.Application) string {
arguments := []string{ast.Visit(v, n.Abstraction)}
for _, argument := range n.Arguments {
arguments = append(arguments, ast.Visit(v, argument))
}
return "(" + strings.Join(arguments, " ") + ")"
}
func Stringify(n ast.Expression) string {
return ast.Visit(&stringifyVisitor{}, n)
}