Commit 5b549f1d authored by thebusytypist's avatar thebusytypist

Elaborate the construction of state machine; add states diagram.

parent 03ecc2e4
digraph {
splines=true;
node [shape = doublecircle]; Start; Finish;
node [shape = circle];
Start -> ArrayInitial [label="["];
Start -> ObjectInitial [label="{"];
ObjectInitial -> ObjectFinish [label="}"];
ObjectInitial -> MemberKey [label="string"];
MemberKey -> KeyValueDelimiter [label=":"];
KeyValueDelimiter -> ArrayInitial [label="[ (push MemberValue)"];
KeyValueDelimiter -> ObjectInitial [label="{ (push MemberValue)"];
KeyValueDelimiter -> MemberValue [label="string|false|true|null|number"];
MemberValue -> ObjectFinish [label="}"];
MemberValue -> MemberDelimiter [label=","];
MemberDelimiter -> MemberKey [label="string"];
ArrayInitial -> ArrayInitial [label="[ (push Element)"];
ArrayInitial -> ArrayFinish [label="]"];
ArrayInitial -> ObjectInitial [label="{ (push Element)"];
ArrayInitial -> Element [label="string|flase|true|null|number"];
Element -> ArrayFinish [label="]"];
Element -> ElementDelimiter [label=","];
ElementDelimiter -> ArrayInitial [label="[ (push Element)"];
ElementDelimiter -> ObjectInitial [label="{ (push Element)"];
ElementDelimiter -> Element [label="string|false|true|null|number"];
ArrayFinish -> Finish;
ObjectFinish -> Finish;
}
......@@ -112,10 +112,16 @@ while generating a production could work.
In RapidJSON, several modifications(or adaptations to current design) are made to a direct implementation.
First, the parsing table is encoded in a state machine in RapidJSON.
Extra states are added for productions involved with `array` and `object`.
States are constructed by the head and body of production.
State transitions are constructed by production rules.
Besides, extra states are added for productions involved with `array` and `object`.
In this way the generation of array values or object members would be a single state transition,
rather than several pop/push operations in the direct implementation.
This also makes the estimation of stack size more easier.
The final states diagram is shown below:
![States Diagram](diagram/iterative-parser-states-diagram.png)
Second, the iterative parser also keeps track of array's value count and object's member count
in its internal stack, which may be different from a conventional implementation.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment