scanner: parse floats in form of .9 , .123

This commit is contained in:
Fatih Arslan 2015-10-05 12:31:26 +03:00
parent 69796c9fd2
commit c7955d276f
2 changed files with 35 additions and 27 deletions

View File

@ -120,6 +120,13 @@ func (s *Scanner) Scan() (tok token.Token) {
case '"': case '"':
tok = token.STRING tok = token.STRING
s.scanString() 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) ch = s.scanMantissa(ch)
fmt.Printf("ch = %q\n", ch)
if ch == '.' || ch == 'e' || ch == 'E' { if ch == '.' || ch == 'e' || ch == 'E' {
ch = s.scanFraction(ch) ch = s.scanFraction(ch)
ch = s.scanExponent(ch) ch = s.scanExponent(ch)

View File

@ -101,37 +101,37 @@ func TestString(t *testing.T) {
func TestNumber(t *testing.T) { func TestNumber(t *testing.T) {
var tokenList = []tokenPair{ var tokenList = []tokenPair{
// {token.NUMBER, "0"}, {token.NUMBER, "0"},
// {token.NUMBER, "1"}, {token.NUMBER, "1"},
// {token.NUMBER, "9"}, {token.NUMBER, "9"},
// {token.NUMBER, "42"}, {token.NUMBER, "42"},
// {token.NUMBER, "1234567890"}, {token.NUMBER, "1234567890"},
// {token.NUMBER, "00"}, {token.NUMBER, "00"},
// {token.NUMBER, "01"}, {token.NUMBER, "01"},
// {token.NUMBER, "07"}, {token.NUMBER, "07"},
// {token.NUMBER, "042"}, {token.NUMBER, "042"},
// {token.NUMBER, "01234567"}, {token.NUMBER, "01234567"},
// {token.NUMBER, "0x0"}, {token.NUMBER, "0x0"},
// {token.NUMBER, "0x1"}, {token.NUMBER, "0x1"},
// {token.NUMBER, "0xf"}, {token.NUMBER, "0xf"},
// {token.NUMBER, "0x42"}, {token.NUMBER, "0x42"},
// {token.NUMBER, "0x123456789abcDEF"}, {token.NUMBER, "0x123456789abcDEF"},
// {token.NUMBER, "0x" + f100}, {token.NUMBER, "0x" + f100},
// {token.NUMBER, "0X0"}, {token.NUMBER, "0X0"},
// {token.NUMBER, "0X1"}, {token.NUMBER, "0X1"},
// {token.NUMBER, "0XF"}, {token.NUMBER, "0XF"},
// {token.NUMBER, "0X42"}, {token.NUMBER, "0X42"},
// {token.NUMBER, "0X123456789abcDEF"}, {token.NUMBER, "0X123456789abcDEF"},
// {token.NUMBER, "0X" + f100}, {token.NUMBER, "0X" + f100},
// {token.FLOAT, "0."}, {token.FLOAT, "0."},
// {token.FLOAT, "1."}, {token.FLOAT, "1."},
// {token.FLOAT, "42."}, {token.FLOAT, "42."},
// {token.FLOAT, "01234567890."}, {token.FLOAT, "01234567890."},
{token.FLOAT, ".0"}, {token.FLOAT, ".0"},
{token.FLOAT, ".1"}, {token.FLOAT, ".1"},
{token.FLOAT, ".42"}, {token.FLOAT, ".42"},
{token.FLOAT, ".0123456789"}, {token.FLOAT, ".0123456789"},
// {token.FLOAT, "0.0"}, {token.FLOAT, "0.0"},
// {token.FLOAT, "1.0"}, // {token.FLOAT, "1.0"},
// {token.FLOAT, "42.0"}, // {token.FLOAT, "42.0"},
// {token.FLOAT, "01234567890.0"}, // {token.FLOAT, "01234567890.0"},