diff options
Diffstat (limited to 'ast/ast.go')
| -rw-r--r-- | ast/ast.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/ast/ast.go b/ast/ast.go new file mode 100644 index 0000000..033005f --- /dev/null +++ b/ast/ast.go @@ -0,0 +1,48 @@ +package ast + +import ( + "github.com/mewsen/interpreter/token" +) + +type Node interface { + TokenLiteral() string +} + +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() + } else { + return "" + } +} + +type LetStatement struct { + Token token.Token + Name *Identifier + Value Expression +} + +func (ls *LetStatement) statementNode() {} +func (ls *LetStatement) TokenLiteral() string { return ls.Token.Literal } + +type Identifier struct { + Token token.Token + Value string +} + +func (i *Identifier) expressionNode() {} +func (i *Identifier) TokenLiteral() string { return i.Token.Literal } |
