2025-01-02 19:46:45 -08:00
|
|
|
package ast
|
|
|
|
|
|
2025-01-03 19:38:03 -08:00
|
|
|
import (
|
|
|
|
|
"bytes"
|
|
|
|
|
)
|
2025-01-02 19:46:45 -08:00
|
|
|
|
|
|
|
|
type Node interface {
|
|
|
|
|
TokenLiteral() string
|
2025-01-03 19:38:03 -08:00
|
|
|
String() string
|
2025-01-02 19:46:45 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Statement interface {
|
|
|
|
|
Node
|
|
|
|
|
statementNode()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Expression interface {
|
|
|
|
|
Node
|
|
|
|
|
expressionNode()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Program struct {
|
|
|
|
|
Statements []Statement
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (p *Program) TokenLiteral() string {
|
|
|
|
|
if len(p.Statements) > 0 {
|
|
|
|
|
return p.Statements[0].TokenLiteral()
|
|
|
|
|
}
|
|
|
|
|
return ""
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-03 19:38:03 -08:00
|
|
|
func (p *Program) String() string {
|
|
|
|
|
var out bytes.Buffer
|
|
|
|
|
for _, stmt := range p.Statements {
|
|
|
|
|
out.WriteString(stmt.String())
|
|
|
|
|
}
|
|
|
|
|
return out.String()
|
|
|
|
|
}
|