aboutsummaryrefslogtreecommitdiff
path: root/devel
diff options
context:
space:
mode:
authorMark Pulford <mark@kyne.com.au>2011-12-20 22:42:59 +1030
committerMark Pulford <mark@kyne.com.au>2011-12-20 22:42:59 +1030
commit4f0b8d47af36dcd7cc1c41f3314805265250aa95 (patch)
treecd2f92a2d798f830fd1f374b3219dd7275071b18 /devel
parent7612cef30d371b12d07f80dde2d4ff7dff1082e5 (diff)
downloadlua-cjson-4f0b8d47af36dcd7cc1c41f3314805265250aa95.tar.gz
lua-cjson-4f0b8d47af36dcd7cc1c41f3314805265250aa95.tar.bz2
lua-cjson-4f0b8d47af36dcd7cc1c41f3314805265250aa95.zip
Add original JSON parser design outline
Diffstat (limited to 'devel')
-rw-r--r--devel/json_parser_outline.txt50
1 files changed, 50 insertions, 0 deletions
diff --git a/devel/json_parser_outline.txt b/devel/json_parser_outline.txt
new file mode 100644
index 0000000..01db78d
--- /dev/null
+++ b/devel/json_parser_outline.txt
@@ -0,0 +1,50 @@
1parser:
2 - call parse_value
3 - next_token
4 ? <EOF> nop.
5
6parse_value:
7 - next_token
8 ? <OBJ_BEGIN> call parse_object.
9 ? <ARR_BEGIN> call parse_array.
10 ? <STRING> push. return.
11 ? <BOOLEAN> push. return.
12 ? <NULL> push. return.
13 ? <NUMBER> push. return.
14
15parse_object:
16 - push table
17 - next_token
18 ? <STRING> push.
19 - next_token
20 ? <COLON> nop.
21 - call parse_value
22 - set table
23 - next_token
24 ? <OBJ_END> return.
25 ? <COMMA> loop parse_object.
26
27parse_array:
28 - push table
29 - call parse_value
30 - table append
31 - next_token
32 ? <COMMA> loop parse_array.
33 ? ] return.
34
35next_token:
36 - check next character
37 ? { return <OBJ_BEGIN>
38 ? } return <OBJ_END>
39 ? [ return <ARR_BEGIN>
40 ? ] return <ARR_END>
41 ? , return <COMMA>
42 ? : return <COLON>
43 ? [-0-9] gobble number. return <NUMBER>
44 ? " gobble string. return <STRING>
45 ? [ \t\n] eat whitespace.
46 ? n Check "null". return <NULL> or <UNKNOWN>
47 ? t Check "true". return <BOOLEAN> or <UNKNOWN>
48 ? f Check "false". return <BOOLEAN> or <UNKNOWN>
49 ? . return <UNKNOWN>
50 ? \0 return <END>