diff --git a/scanner/scanner.go b/scanner/scanner.go index a491691..63480ab 100644 --- a/scanner/scanner.go +++ b/scanner/scanner.go @@ -120,6 +120,13 @@ func (s *Scanner) Scan() (tok token.Token) { case '"': tok = token.STRING s.scanString() + case '.': + ch = s.next() + if isDecimal(ch) { + tok = token.FLOAT + ch = s.scanMantissa(ch) + ch = s.scanExponent(ch) + } } } @@ -177,6 +184,7 @@ func (s *Scanner) scanNumber(ch rune) token.Token { } ch = s.scanMantissa(ch) + fmt.Printf("ch = %q\n", ch) if ch == '.' || ch == 'e' || ch == 'E' { ch = s.scanFraction(ch) ch = s.scanExponent(ch) diff --git a/scanner/scanner_test.go b/scanner/scanner_test.go index 29ff830..e4d75fb 100644 --- a/scanner/scanner_test.go +++ b/scanner/scanner_test.go @@ -101,37 +101,37 @@ func TestString(t *testing.T) { func TestNumber(t *testing.T) { var tokenList = []tokenPair{ - // {token.NUMBER, "0"}, - // {token.NUMBER, "1"}, - // {token.NUMBER, "9"}, - // {token.NUMBER, "42"}, - // {token.NUMBER, "1234567890"}, - // {token.NUMBER, "00"}, - // {token.NUMBER, "01"}, - // {token.NUMBER, "07"}, - // {token.NUMBER, "042"}, - // {token.NUMBER, "01234567"}, - // {token.NUMBER, "0x0"}, - // {token.NUMBER, "0x1"}, - // {token.NUMBER, "0xf"}, - // {token.NUMBER, "0x42"}, - // {token.NUMBER, "0x123456789abcDEF"}, - // {token.NUMBER, "0x" + f100}, - // {token.NUMBER, "0X0"}, - // {token.NUMBER, "0X1"}, - // {token.NUMBER, "0XF"}, - // {token.NUMBER, "0X42"}, - // {token.NUMBER, "0X123456789abcDEF"}, - // {token.NUMBER, "0X" + f100}, - // {token.FLOAT, "0."}, - // {token.FLOAT, "1."}, - // {token.FLOAT, "42."}, - // {token.FLOAT, "01234567890."}, + {token.NUMBER, "0"}, + {token.NUMBER, "1"}, + {token.NUMBER, "9"}, + {token.NUMBER, "42"}, + {token.NUMBER, "1234567890"}, + {token.NUMBER, "00"}, + {token.NUMBER, "01"}, + {token.NUMBER, "07"}, + {token.NUMBER, "042"}, + {token.NUMBER, "01234567"}, + {token.NUMBER, "0x0"}, + {token.NUMBER, "0x1"}, + {token.NUMBER, "0xf"}, + {token.NUMBER, "0x42"}, + {token.NUMBER, "0x123456789abcDEF"}, + {token.NUMBER, "0x" + f100}, + {token.NUMBER, "0X0"}, + {token.NUMBER, "0X1"}, + {token.NUMBER, "0XF"}, + {token.NUMBER, "0X42"}, + {token.NUMBER, "0X123456789abcDEF"}, + {token.NUMBER, "0X" + f100}, + {token.FLOAT, "0."}, + {token.FLOAT, "1."}, + {token.FLOAT, "42."}, + {token.FLOAT, "01234567890."}, {token.FLOAT, ".0"}, {token.FLOAT, ".1"}, {token.FLOAT, ".42"}, {token.FLOAT, ".0123456789"}, - // {token.FLOAT, "0.0"}, + {token.FLOAT, "0.0"}, // {token.FLOAT, "1.0"}, // {token.FLOAT, "42.0"}, // {token.FLOAT, "01234567890.0"},