From 9a8e3690fec828a986a775ce6ec422b11dede81b Mon Sep 17 00:00:00 2001 From: unintendedfraud Date: Tue, 19 Mar 2024 13:37:31 +0100 Subject: [PATCH] parser --- ast/ast.go | 19 +++++++++++++++++++ parser/parser.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 parser/parser.go diff --git a/ast/ast.go b/ast/ast.go index ff5373a..234a3e8 100644 --- a/ast/ast.go +++ b/ast/ast.go @@ -1,5 +1,7 @@ package ast +import "gointerpreter/token" + type Node interface { TokenLiteral() string } @@ -25,3 +27,20 @@ func (p *Program) TokenLiteral() string { 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 } diff --git a/parser/parser.go b/parser/parser.go new file mode 100644 index 0000000..2ba8ff5 --- /dev/null +++ b/parser/parser.go @@ -0,0 +1,32 @@ +package parser + +import ( + "gointerpreter/ast" + "gointerpreter/lexer" + "gointerpreter/token" +) + +type Parser struct { + l *lexer.Lexer + + currToken token.Token + peekToken token.Token +} + +func New(l *lexer.Lexer) *Parser { + p := &Parser{l: l} + + p.nextToken() + p.nextToken() + + return p +} + +func (p *Parser) nextToken() { + p.currToken = p.peekToken + p.peekToken = p.l.NextToken() +} + +func (p *Parser) ParseProgram() *ast.Program { + return nil +}