diff options
Diffstat (limited to 'parser')
| -rw-r--r-- | parser/parser.go | 40 | ||||
| -rw-r--r-- | parser/parser_test.go | 14 | ||||
| -rw-r--r-- | parser/parser_tracing.go | 2 |
3 files changed, 37 insertions, 19 deletions
diff --git a/parser/parser.go b/parser/parser.go index c7d6234..3fe3d9f 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -252,7 +252,7 @@ func (p *Parser) parseExpression(precedence int) ast.Expression { p.nextToken() leftExp = infix(leftExp) - + } return leftExp @@ -294,21 +294,29 @@ func (p *Parser) parseInfixExpression(left ast.Expression) ast.Expression { func (p *Parser) parseIfExpression() ast.Expression { expression := &ast.IfExpression{Token: p.curToken} - if !p.expectPeek(tokens.LPAREN) { return nil } + if !p.expectPeek(tokens.LPAREN) { + return nil + } p.nextToken() expression.Condition = p.parseExpression(LOWEST) - if !p.expectPeek(tokens.RPAREN) { return nil } + if !p.expectPeek(tokens.RPAREN) { + return nil + } - if !p.expectPeek(tokens.LBRACE) { return nil } + if !p.expectPeek(tokens.LBRACE) { + return nil + } expression.Consequence = p.parseBlockStatement() if p.peekTokenIs(tokens.ELSE) { p.nextToken() - if !p.expectPeek(tokens.LBRACE) { return nil } + if !p.expectPeek(tokens.LBRACE) { + return nil + } expression.Alternative = p.parseBlockStatement() } @@ -338,11 +346,15 @@ func (p *Parser) parseBlockStatement() *ast.BlockStatement { func (p *Parser) parseFunctionLiteral() ast.Expression { lit := &ast.FunctionLiteral{Token: p.curToken} - if !p.expectPeek(tokens.LPAREN) { return nil } + if !p.expectPeek(tokens.LPAREN) { + return nil + } lit.Parameters = p.parseFunctionParameters() - if !p.expectPeek(tokens.LBRACE) { return nil } + if !p.expectPeek(tokens.LBRACE) { + return nil + } lit.Body = p.parseBlockStatement() @@ -371,7 +383,9 @@ func (p *Parser) parseFunctionParameters() []*ast.Identifier { identifiers = append(identifiers, ident) } - if !p.expectPeek(tokens.RPAREN) { return nil } + if !p.expectPeek(tokens.RPAREN) { + return nil + } return identifiers } @@ -382,7 +396,9 @@ func (p *Parser) parseGroupedExpression() ast.Expression { exp := p.parseExpression(LOWEST) - if !p.expectPeek(tokens.RPAREN) { return nil } + if !p.expectPeek(tokens.RPAREN) { + return nil + } return exp } @@ -413,7 +429,9 @@ func (p *Parser) parseCallArguments() []ast.Expression { args = append(args, p.parseExpression(LOWEST)) } - if !p.expectPeek(tokens.RPAREN) { return nil } + if !p.expectPeek(tokens.RPAREN) { + return nil + } return args } @@ -453,7 +471,7 @@ func (p *Parser) peekError(t tokens.TokenType) { p.errors = append(p.errors, msg) } -// peek and cur precedences +// peek and cur precedences func (p *Parser) peekPrecedence() int { if p, ok := precedences[p.peekToken.Type]; ok { diff --git a/parser/parser_test.go b/parser/parser_test.go index a9754f5..08539b7 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -9,10 +9,10 @@ import ( func TestLetStatements(t *testing.T) { tests := []struct { - input string + input string expectedIdentifier string - expectedValue interface{} - } { + expectedValue interface{} + }{ {"let x = 5;", "x", 5}, {"let y = true;", "y", true}, {"let foobar = y;", "foobar", "y"}, @@ -303,9 +303,9 @@ func TestBooleanExpression(t *testing.T) { // Prefix expression tests. func TestParsingPrefixExpressions(t *testing.T) { var prefixTests = []struct { - input string - operator string - value interface{} + input string + operator string + value interface{} }{ {"!5;", "!", 5}, {"-15;", "-", 15}, @@ -722,7 +722,7 @@ func TestFunctionParameterParsing(t *testing.T) { var program *ast.Program = p.ParseProgram() checkParserErrors(t, p) - + stmt := program.Statements[0].(*ast.ExpressionStatement) function := stmt.Expression.(*ast.FunctionLiteral) diff --git a/parser/parser_tracing.go b/parser/parser_tracing.go index a0819da..2f3fcdb 100644 --- a/parser/parser_tracing.go +++ b/parser/parser_tracing.go @@ -34,4 +34,4 @@ func trace(msg string) string { func untrace(msg string) { tracePrint("END " + msg) decIdent() -}
\ No newline at end of file +} |
