Properly lex floating constants
digit-sequence? '.' digit-sequence exponent-part? digit-sequence '.' exponent-part? exponent-part: [eE] [+-]? digit-sequence
This commit is contained in:
parent
2dc91cb4d5
commit
c5bd98b7db
1 changed files with 20 additions and 5 deletions
|
|
@ -315,13 +315,28 @@ proc getNumber16(L: var TLexer, tok: var TToken) =
|
||||||
else: tok.xkind = pxIntLit
|
else: tok.xkind = pxIntLit
|
||||||
L.bufpos = pos
|
L.bufpos = pos
|
||||||
|
|
||||||
|
proc getFloating(L: var TLexer, tok: var TToken) =
|
||||||
|
matchUnderscoreChars(L, tok, {'0'..'9'})
|
||||||
|
if L.buf[L.bufpos] in {'e', 'E'}:
|
||||||
|
add(tok.s, L.buf[L.bufpos])
|
||||||
|
inc(L.bufpos)
|
||||||
|
if L.buf[L.bufpos] in {'+', '-'}:
|
||||||
|
add(tok.s, L.buf[L.bufpos])
|
||||||
|
inc(L.bufpos)
|
||||||
|
matchUnderscoreChars(L, tok, {'0'..'9'})
|
||||||
|
|
||||||
proc getNumber(L: var TLexer, tok: var TToken) =
|
proc getNumber(L: var TLexer, tok: var TToken) =
|
||||||
tok.base = base10
|
tok.base = base10
|
||||||
matchUnderscoreChars(L, tok, {'0'..'9'})
|
if L.buf[L.bufpos] == '.':
|
||||||
if (L.buf[L.bufpos] == '.') and (L.buf[L.bufpos + 1] in {'0'..'9'}):
|
add(tok.s, "0.")
|
||||||
add(tok.s, '.')
|
|
||||||
inc(L.bufpos)
|
inc(L.bufpos)
|
||||||
matchUnderscoreChars(L, tok, {'e', 'E', '+', '-', '0'..'9'})
|
getFloating(L, tok)
|
||||||
|
else:
|
||||||
|
matchUnderscoreChars(L, tok, {'0'..'9'})
|
||||||
|
if L.buf[L.bufpos] == '.':
|
||||||
|
add(tok.s, '.')
|
||||||
|
inc(L.bufpos)
|
||||||
|
getFloating(L, tok)
|
||||||
try:
|
try:
|
||||||
if isFloatLiteral(tok.s):
|
if isFloatLiteral(tok.s):
|
||||||
tok.fnumber = parseFloat(tok.s)
|
tok.fnumber = parseFloat(tok.s)
|
||||||
|
|
@ -576,7 +591,7 @@ proc getTok(L: var TLexer, tok: var TToken) =
|
||||||
of 'b', 'B': getNumber2(L, tok)
|
of 'b', 'B': getNumber2(L, tok)
|
||||||
of '1'..'7': getNumber8(L, tok)
|
of '1'..'7': getNumber8(L, tok)
|
||||||
else: getNumber(L, tok)
|
else: getNumber(L, tok)
|
||||||
elif c in {'1'..'9'}:
|
elif c in {'1'..'9'} or (c == '.' and L.buf[L.bufpos+1] in {'0'..'9'}):
|
||||||
getNumber(L, tok)
|
getNumber(L, tok)
|
||||||
else:
|
else:
|
||||||
case c
|
case c
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue