summaryrefslogtreecommitdiff
path: root/devel/json_parser_outline.txt
blob: 01db78d32d44d7ef5cb9358c197b487a324e32c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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>