Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpx/lua-cjson.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/devel
diff options
context:
space:
mode:
authorMark Pulford <mark@kyne.com.au>2011-12-20 16:12:59 +0400
committerMark Pulford <mark@kyne.com.au>2011-12-20 16:12:59 +0400
commit4f0b8d47af36dcd7cc1c41f3314805265250aa95 (patch)
treecd2f92a2d798f830fd1f374b3219dd7275071b18 /devel
parent7612cef30d371b12d07f80dde2d4ff7dff1082e5 (diff)
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 @@
+parser:
+ - call parse_value
+ - next_token
+ ? <EOF> nop.
+
+parse_value:
+ - next_token
+ ? <OBJ_BEGIN> call parse_object.
+ ? <ARR_BEGIN> call parse_array.
+ ? <STRING> push. return.
+ ? <BOOLEAN> push. return.
+ ? <NULL> push. return.
+ ? <NUMBER> push. return.
+
+parse_object:
+ - push table
+ - next_token
+ ? <STRING> push.
+ - next_token
+ ? <COLON> nop.
+ - call parse_value
+ - set table
+ - next_token
+ ? <OBJ_END> return.
+ ? <COMMA> loop parse_object.
+
+parse_array:
+ - push table
+ - call parse_value
+ - table append
+ - next_token
+ ? <COMMA> loop parse_array.
+ ? ] return.
+
+next_token:
+ - check next character
+ ? { return <OBJ_BEGIN>
+ ? } return <OBJ_END>
+ ? [ return <ARR_BEGIN>
+ ? ] return <ARR_END>
+ ? , return <COMMA>
+ ? : return <COLON>
+ ? [-0-9] gobble number. return <NUMBER>
+ ? " gobble string. return <STRING>
+ ? [ \t\n] eat whitespace.
+ ? n Check "null". return <NULL> or <UNKNOWN>
+ ? t Check "true". return <BOOLEAN> or <UNKNOWN>
+ ? f Check "false". return <BOOLEAN> or <UNKNOWN>
+ ? . return <UNKNOWN>
+ ? \0 return <END>