From b3379d4e5a87641bec8f3ef47e13a7baa4ac23d6 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 1 Apr 2018 15:00:51 +0200 Subject: kiss --- parser/parser.go | 70 ++++++++++++++++++++++++-------------------------------- 1 file changed, 30 insertions(+), 40 deletions(-) diff --git a/parser/parser.go b/parser/parser.go index 0ba449f..fb113e3 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -50,38 +50,36 @@ type Parser struct { } func New(l *lexer.Lexer) *Parser { - p := &Parser{ - l: l, - errors: []string{}, - } - - p.prefixParseFns = make(map[token.TokenType]prefixParseFn) - p.registerPrefix(token.IDENT, p.parseIdentifier) - p.registerPrefix(token.INTEGER, p.parseIntegerLiteral) - p.registerPrefix(token.STRING, p.parseStringLiteral) - p.registerPrefix(token.BANG, p.parsePrefixExpression) - p.registerPrefix(token.MINUS, p.parsePrefixExpression) - p.registerPrefix(token.TRUE, p.parseBoolean) - p.registerPrefix(token.FALSE, p.parseBoolean) - p.registerPrefix(token.LPAREN, p.parseGroupedExpression) - p.registerPrefix(token.IF, p.parseIfExpression) - p.registerPrefix(token.FUNCTION, p.parseFunctionLiteral) - p.registerPrefix(token.LBRACKET, p.parseArrayLiteral) - p.registerPrefix(token.LBRACE, p.parseHashLiteral) - p.registerPrefix(token.MACRO, p.parseMacroLiteral) - - p.infixParseFns = make(map[token.TokenType]infixParseFn) - p.registerInfix(token.PLUS, p.parseInfixExpression) - p.registerInfix(token.MINUS, p.parseInfixExpression) - p.registerInfix(token.SLASH, p.parseInfixExpression) - p.registerInfix(token.ASTERISK, p.parseInfixExpression) - p.registerInfix(token.EQ, p.parseInfixExpression) - p.registerInfix(token.NOT_EQ, p.parseInfixExpression) - p.registerInfix(token.LESS, p.parseInfixExpression) - p.registerInfix(token.MORE, p.parseInfixExpression) - - p.registerInfix(token.LPAREN, p.parseCallExpression) - p.registerInfix(token.LBRACKET, p.parseIndexExpression) + p := &Parser{l: l} + + p.prefixParseFns = map[token.TokenType]prefixParseFn{ + token.IDENT: p.parseIdentifier, + token.INTEGER: p.parseIntegerLiteral, + token.STRING: p.parseStringLiteral, + token.BANG: p.parsePrefixExpression, + token.MINUS: p.parsePrefixExpression, + token.TRUE: p.parseBoolean, + token.FALSE: p.parseBoolean, + token.LPAREN: p.parseGroupedExpression, + token.IF: p.parseIfExpression, + token.FUNCTION: p.parseFunctionLiteral, + token.LBRACKET: p.parseArrayLiteral, + token.LBRACE: p.parseHashLiteral, + token.MACRO: p.parseMacroLiteral, + } + + p.infixParseFns = map[token.TokenType]infixParseFn{ + token.PLUS: p.parseInfixExpression, + token.MINUS: p.parseInfixExpression, + token.SLASH: p.parseInfixExpression, + token.ASTERISK: p.parseInfixExpression, + token.EQ: p.parseInfixExpression, + token.NOT_EQ: p.parseInfixExpression, + token.LESS: p.parseInfixExpression, + token.MORE: p.parseInfixExpression, + token.LPAREN: p.parseCallExpression, + token.LBRACKET: p.parseIndexExpression, + } // Read two tokens, so curToken and peekToken are both set p.nextToken() @@ -500,11 +498,3 @@ func (p *Parser) parseMacroLiteral() ast.Expression { return lit } - -func (p *Parser) registerPrefix(tokenType token.TokenType, fn prefixParseFn) { - p.prefixParseFns[tokenType] = fn -} - -func (p *Parser) registerInfix(tokenType token.TokenType, fn infixParseFn) { - p.infixParseFns[tokenType] = fn -} -- cgit v1.2.3