syntax

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 17, 2026 License: MIT Imports: 9 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DumpAST

func DumpAST(program *Program, modules map[string]*Module) string

DumpAST renders the program body followed by every imported module's bindings, modules in sorted order for a stable result.

func NodePos

func NodePos(node Node) source.SourcePos

func NodeType

func NodeType(node Node) string

func Recover

func Recover()

func Traverse

func Traverse(node Node, pre, post func(n Node))

func TraverseList

func TraverseList[N Node](list []N, pre, post func(n Node))

Types

type Binding

type Binding struct {
	Name       *Name
	Expression Expression
}

func (*Binding) FirstPos

func (x *Binding) FirstPos() source.SourcePos

func (*Binding) LastPos

func (x *Binding) LastPos() source.SourcePos

type Expression

type Expression interface {
	Node
	// contains filtered or unexported methods
}

type Lambda

type Lambda struct {
	Cases []*LambdaCase

	Start, End source.SourcePos
}

func (*Lambda) FirstPos

func (x *Lambda) FirstPos() source.SourcePos

func (*Lambda) LastPos

func (x *Lambda) LastPos() source.SourcePos

type LambdaCase

type LambdaCase struct {
	Pattern    Pattern
	Expression Expression
}

func (*LambdaCase) FirstPos

func (x *LambdaCase) FirstPos() source.SourcePos

func (*LambdaCase) LastPos

func (x *LambdaCase) LastPos() source.SourcePos

type Let

type Let struct {
	Bindings   []*Binding
	Expression Expression

	Start source.SourcePos
}

func (*Let) FirstPos

func (x *Let) FirstPos() source.SourcePos

func (*Let) LastPos

func (x *Let) LastPos() source.SourcePos

type List

type List struct {
	SubExpressions []Expression

	Start, End source.SourcePos
}

func (*List) FirstPos

func (x *List) FirstPos() source.SourcePos

func (*List) LastPos

func (x *List) LastPos() source.SourcePos

type ListPattern

type ListPattern struct {
	SubPatterns []Pattern

	Start, End source.SourcePos
}

func (*ListPattern) FirstPos

func (x *ListPattern) FirstPos() source.SourcePos

func (*ListPattern) LastPos

func (x *ListPattern) LastPos() source.SourcePos

type Module

type Module struct {
	Name           string
	Imports        []*Name
	PublicBindings []*Binding

	Start source.SourcePos
}

func ParseModule

func ParseModule(tokens []Token) *Module

func (*Module) FirstPos

func (x *Module) FirstPos() source.SourcePos

func (*Module) LastPos

func (x *Module) LastPos() source.SourcePos

type Name

type Name struct {
	Value string
	Pos   source.SourcePos
}

func (*Name) FirstPos

func (x *Name) FirstPos() source.SourcePos

func (*Name) LastPos

func (x *Name) LastPos() source.SourcePos

type Node

type Node interface {
	FirstPos() source.SourcePos
	LastPos() source.SourcePos
}

type NumberLiteral

type NumberLiteral struct {
	Value float64

	Pos source.SourcePos
}

func (*NumberLiteral) FirstPos

func (x *NumberLiteral) FirstPos() source.SourcePos

func (*NumberLiteral) LastPos

func (x *NumberLiteral) LastPos() source.SourcePos

type Operation

type Operation struct {
	Operator string
	Operands []Expression
}

func (*Operation) FirstPos

func (x *Operation) FirstPos() source.SourcePos

func (*Operation) LastPos

func (x *Operation) LastPos() source.SourcePos

type Parser

type Parser struct {
	Tokens   []Token
	Head     int
	PosStack []source.SourcePos
}

func (*Parser) Accept

func (p *Parser) Accept(kind string) bool

func (*Parser) Consume

func (p *Parser) Consume() Token

func (*Parser) Expect

func (p *Parser) Expect(kind string) Token

func (*Parser) Is

func (p *Parser) Is(kind string) bool

func (*Parser) ParseApplication

func (p *Parser) ParseApplication() Expression

func (*Parser) ParseAtomic

func (p *Parser) ParseAtomic(mandatory bool) Expression

func (*Parser) ParseBinding

func (p *Parser) ParseBinding() *Binding

func (*Parser) ParseExpression

func (p *Parser) ParseExpression() Expression

func (*Parser) ParseLambdaCase

func (p *Parser) ParseLambdaCase() *LambdaCase

func (*Parser) ParseLet

func (p *Parser) ParseLet() *Let

func (*Parser) ParseModule

func (p *Parser) ParseModule() *Module

func (*Parser) ParseName

func (p *Parser) ParseName() *Name

func (*Parser) ParseOperation

func (p *Parser) ParseOperation() Expression

func (*Parser) ParseProgram

func (p *Parser) ParseProgram() *Program

func (*Parser) ParseQualifiedName

func (p *Parser) ParseQualifiedName() Expression

func (*Parser) Peek

func (p *Parser) Peek(offset int) Token

func (*Parser) Pos

func (p *Parser) Pos() source.SourcePos

func (*Parser) PrevPos

func (p *Parser) PrevPos() source.SourcePos

type Pattern

type Pattern interface {
	Node
	// contains filtered or unexported methods
}

func ToPattern

func ToPattern(expr Expression) Pattern

type Program

type Program struct {
	Imports []*Name
	Body    Expression

	Start source.SourcePos
}

func ParseProgram

func ParseProgram(tokens []Token) *Program

func (*Program) FirstPos

func (x *Program) FirstPos() source.SourcePos

func (*Program) LastPos

func (x *Program) LastPos() source.SourcePos

type QualifiedName

type QualifiedName struct {
	Module string
	Value  string

	Start, End source.SourcePos
}

func (*QualifiedName) FirstPos

func (x *QualifiedName) FirstPos() source.SourcePos

func (*QualifiedName) LastPos

func (x *QualifiedName) LastPos() source.SourcePos

type Resolution

type Resolution struct {
	Errors int
	Uses   map[*Name]ResolutionFact
	Quals  map[*QualifiedName]*Binding
}

func Resolve

func Resolve(program *Program, modules map[string]*Module) *Resolution

type ResolutionFact

type ResolutionFact struct {
	Kind   ResolveKind
	Def    Node    // The defining *Binding or *Name; nil for builtins
	Module *Module // Set if Kind == ResolveModule
}

type ResolveKind

type ResolveKind uint8
const (
	ResolveLocal ResolveKind = iota
	ResolveModule
	ResolveBuiltin
)

type Resolver

type Resolver struct {
	// contains filtered or unexported fields
}

type StringLiteral

type StringLiteral struct {
	Value string

	Pos source.SourcePos
}

func (*StringLiteral) FirstPos

func (x *StringLiteral) FirstPos() source.SourcePos

func (*StringLiteral) LastPos

func (x *StringLiteral) LastPos() source.SourcePos

type Token

type Token struct {
	Kind  string
	Value string
	Pos   source.SourcePos
}

func Lex

func Lex(path string) []Token

func LexContent

func LexContent(path string, content string) []Token

func (Token) Number

func (t Token) Number() float64

Number returns a number token's value. LexContent validates every literal it admits, so this cannot fail on a token the lexer produced.

type TupleExpr

type TupleExpr struct {
	SubExpressions []Expression

	Start, End source.SourcePos
}

func (*TupleExpr) FirstPos

func (x *TupleExpr) FirstPos() source.SourcePos

func (*TupleExpr) LastPos

func (x *TupleExpr) LastPos() source.SourcePos

type TuplePattern

type TuplePattern struct {
	SubPatterns []Pattern

	Start, End source.SourcePos
}

func (*TuplePattern) FirstPos

func (x *TuplePattern) FirstPos() source.SourcePos

func (*TuplePattern) LastPos

func (x *TuplePattern) LastPos() source.SourcePos

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL