Mercurial > repos > tabletprog
comparison modules/json.tp @ 169:9d8ae39e8e67
Handle floating point numbers in JSON parser
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 11 Aug 2013 04:03:08 -0700 |
parents | 5a6a55592c45 |
children | bb4723fec05e |
comparison
equal
deleted
inserted
replaced
168:224071eed9dd | 169:9d8ae39e8e67 |
---|---|
8 zero <- "0" byte: 0 | 8 zero <- "0" byte: 0 |
9 nine <- "9" byte: 0 | 9 nine <- "9" byte: 0 |
10 neg <- "-" byte: 0 | 10 neg <- "-" byte: 0 |
11 space <- " " byte: 0 | 11 space <- " " byte: 0 |
12 comma <- "," byte: 0 | 12 comma <- "," byte: 0 |
13 period <- "." byte: 0 | |
13 tab <- " " byte: 0 | 14 tab <- " " byte: 0 |
14 nl <- "\n" byte: 0 | 15 nl <- "\n" byte: 0 |
15 cr <- "\r" byte: 0 | 16 cr <- "\r" byte: 0 |
16 colon <- ":" byte: 0 | 17 colon <- ":" byte: 0 |
17 t <- "t" byte: 0 | 18 t <- "t" byte: 0 |
20 parseNumAt <- :str :at :recvResult { | 21 parseNumAt <- :str :at :recvResult { |
21 num <- 0 | 22 num <- 0 |
22 l <- str length | 23 l <- str length |
23 minus <- false | 24 minus <- false |
24 aft <- -1 | 25 aft <- -1 |
26 ignore <- false | |
25 while: { at < l } do: { | 27 while: { at < l } do: { |
26 b <- str byte: at | 28 b <- str byte: at |
27 if: b = neg { | 29 if: b = neg { |
28 minus <- true | 30 minus <- true |
29 } else: { | 31 } else: { |
30 if: b >= zero && b <= nine { | 32 if: b = period { |
31 num <- num * 10 + (str byte: at) - zero | 33 ignore <- true |
32 } else: { | 34 } else: { |
33 aft <- at | 35 if: b >= zero && b <= nine { |
34 at <- l | 36 if: (not: ignore) { |
37 num <- num * 10 + (str byte: at) - zero | |
38 } | |
39 } else: { | |
40 aft <- at | |
41 at <- l | |
42 } | |
35 } | 43 } |
36 } | 44 } |
37 at <- at + 1 | 45 at <- at + 1 |
38 } | 46 } |
39 if: aft < 0 { | 47 if: aft < 0 { |