aboutsummaryrefslogtreecommitdiff
path: root/parser
diff options
context:
space:
mode:
Diffstat (limited to 'parser')
-rw-r--r--parser/parser.go40
-rw-r--r--parser/parser_test.go14
-rw-r--r--parser/parser_tracing.go2
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
+}