diff --git a/evaluator/evaluator_test.go b/evaluator/evaluator_test.go index 7c4c01c..aa555e9 100644 --- a/evaluator/evaluator_test.go +++ b/evaluator/evaluator_test.go @@ -631,10 +631,10 @@ func TestMathModule(t *testing.T) { input string expected interface{} }{ - {`Math.abs(123)`, 123}, - {`Math.abs(-123)`, 123}, - {`Math.abs("foo")`, "first argument to 'Math.abs' must be NUMBER, got STRING on line 1"}, - {`Math.abs()`, "wrong number of arguments: 0 while expected: 1 on line 1"}, + {`math.abs(123)`, 123}, + {`math.abs(-123)`, 123}, + {`math.abs("foo")`, "first argument to 'Math.abs' must be NUMBER, got STRING on line 1"}, + {`math.abs()`, "wrong number of arguments: 0 while expected: 1 on line 1"}, } for _, tt := range tests { diff --git a/lexer/lexer.go b/lexer/lexer.go index ed60527..60630cb 100644 --- a/lexer/lexer.go +++ b/lexer/lexer.go @@ -293,6 +293,18 @@ func (lexer *Lexer) readNumber() string { lexer.readCharacter() } + if lexer.character == rune('e') { + lexer.readCharacter() + + if lexer.character == rune('-') { + lexer.readCharacter() + } + + for isDigit(lexer.character) { + lexer.readCharacter() + } + } + return string(lexer.input[position:lexer.position]) } diff --git a/lexer/lexer_test.go b/lexer/lexer_test.go index 25a5058..eeef125 100644 --- a/lexer/lexer_test.go +++ b/lexer/lexer_test.go @@ -58,6 +58,8 @@ for (key, value in data) { } こんにちは 世界 +123e4 +123e-4 ` tests := []struct { @@ -200,6 +202,8 @@ for (key, value in data) { {token.RBRACE, "}", 49}, {token.IDENTIFIER, "こんにちは", 50}, {token.IDENTIFIER, "世界", 51}, + {token.NUMBER, "123e4", 52}, + {token.NUMBER, "123e-4", 53}, {token.EOF, "", 0}, }