feat: stuff

This commit is contained in:
2025-12-26 03:37:05 -05:00
parent f26e7fbdc9
commit e3629acb45
5 changed files with 59 additions and 16 deletions

View File

@@ -0,0 +1,36 @@
package saccharine
import "strings"
type stringifyVisitor struct {
builder strings.Builder
}
func (v *stringifyVisitor) VisitVariable(a *Variable) {
v.builder.WriteString(a.Name)
}
func (v *stringifyVisitor) VisitAbstraction(f *Abstraction) {
v.builder.WriteRune('\\')
v.builder.WriteString(strings.Join(f.Parameters, " "))
v.builder.WriteRune('.')
f.Body.Accept(v)
}
func (v *stringifyVisitor) VisitApplication(c *Application) {
v.builder.WriteRune('(')
c.Abstraction.Accept(v)
for _, argument := range c.Arguments {
v.builder.WriteRune(' ')
argument.Accept(v)
}
v.builder.WriteRune(')')
}
func Stringify(n Node) string {
b := &stringifyVisitor{}
n.Accept(b)
return b.builder.String()
}