diff --git a/ast/ast.go b/ast/ast.go new file mode 100644 index 0000000..5c80a03 --- /dev/null +++ b/ast/ast.go @@ -0,0 +1,52 @@ +package ast + +import "monkey/token" + +type Node interface { + TokeLiteral() string +} + +type Statement interface { + Node + statement_node() +} + +type Expression interface { + Node + expression_node() +} + +type Program struct { + Statements []Statement +} + +type Identifier struct { + Token token.Token // the token.IDENT token + Value string +} + +type LetStatement struct { + Token token.Token // the token.LET token + Name *Identifier + Value Expression +} + +func (ls *LetStatement) statement_node() {} + +func (ls *LetStatement) TokenLiteral() string { + return ls.Token.Literal +} + +func (i *Identifier) expression_node() {} + +func (i *Identifier) TokenLiteral() string { + return i.Token.Literal +} + +func (p *Program) TokenLiteral() string { + if len(p.Statements) > 0 { + return p.Statements[0].TokenLiteral() + } else { + return "" + } +}