diff options
author | Mark Pulford <mark@kyne.com.au> | 2011-12-20 16:12:59 +0400 |
---|---|---|
committer | Mark Pulford <mark@kyne.com.au> | 2011-12-20 16:12:59 +0400 |
commit | 4f0b8d47af36dcd7cc1c41f3314805265250aa95 (patch) | |
tree | cd2f92a2d798f830fd1f374b3219dd7275071b18 /devel | |
parent | 7612cef30d371b12d07f80dde2d4ff7dff1082e5 (diff) |
Add original JSON parser design outline
Diffstat (limited to 'devel')
-rw-r--r-- | devel/json_parser_outline.txt | 50 |
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> |