docs: document remaining packages and simplify AST types (#45)
## Summary - Added doc comments across the codebase: `pkg/lambda`, `pkg/saccharine`, `pkg/codec`, `pkg/engine`, `pkg/iterator`, `pkg/set`, `pkg/convert`, `internal/registry`, and `cmd/lambda`. - Made lambda and saccharine expression structs use public fields instead of getters, matching `go/ast` conventions. - Removed superfluous constructors for saccharine and lambda expression/statement types in favor of struct literals. - Consolidated saccharine token constructors into a single `NewToken` function. - Removed the unused `trace` package. ## Test plan - [x] `go build ./...` passes. - [x] `go test ./...` passes. - [ ] Verify `go doc` output renders correctly for documented packages. Reviewed-on: #45 Co-authored-by: M.V. Hutz <git@maximhutz.me> Co-committed-by: M.V. Hutz <git@maximhutz.me>
This commit was merged in pull request #45.
This commit is contained in:
60
pkg/saccharine/saccharine.go
Normal file
60
pkg/saccharine/saccharine.go
Normal file
@@ -0,0 +1,60 @@
|
||||
// Package saccharine defines the AST for the Saccharine language, a sugared
|
||||
// lambda calculus with let bindings and multi-statement clauses.
|
||||
package saccharine
|
||||
|
||||
// An Expression is a node in the Saccharine abstract syntax tree.
|
||||
// It is a sealed interface; only types in this package may implement it.
|
||||
type Expression interface {
|
||||
expression()
|
||||
}
|
||||
|
||||
// An Abstraction is a lambda expression with zero or more parameters.
|
||||
// A zero-parameter abstraction is treated as a thunk.
|
||||
type Abstraction struct {
|
||||
Parameters []string
|
||||
Body Expression
|
||||
}
|
||||
|
||||
// An Application applies an expression to zero or more arguments.
|
||||
type Application struct {
|
||||
Abstraction Expression
|
||||
Arguments []Expression
|
||||
}
|
||||
|
||||
// An Atom is a named variable.
|
||||
type Atom struct {
|
||||
Name string
|
||||
}
|
||||
|
||||
// A Clause is a sequence of statements followed by a return expression.
|
||||
type Clause struct {
|
||||
Statements []Statement
|
||||
Returns Expression
|
||||
}
|
||||
|
||||
func (Abstraction) expression() {}
|
||||
func (Application) expression() {}
|
||||
func (Atom) expression() {}
|
||||
func (Clause) expression() {}
|
||||
|
||||
// A Statement is a declaration within a Clause.
|
||||
// It is a sealed interface; only types in this package may implement it.
|
||||
type Statement interface {
|
||||
statement()
|
||||
}
|
||||
|
||||
// A LetStatement binds a name (with optional parameters) to an expression.
|
||||
type LetStatement struct {
|
||||
Name string
|
||||
Parameters []string
|
||||
Body Expression
|
||||
}
|
||||
|
||||
// A DeclareStatement evaluates an expression for its side effects within a
|
||||
// clause.
|
||||
type DeclareStatement struct {
|
||||
Value Expression
|
||||
}
|
||||
|
||||
func (LetStatement) statement() {}
|
||||
func (DeclareStatement) statement() {}
|
||||
Reference in New Issue
Block a user