Compare commits

...

3 Commits

6 changed files with 922 additions and 364 deletions

27
compile
View File

@ -1,24 +1,29 @@
#!/bin/bash
SCRIPT_DIR="$(dirname $0)"
CC=clang
CFLAGS="-g -Wall -Werror -pedantic -Iinclude"
SRC="src/main.c"
OUT=main
CFLAGS="-g -Wall -Werror -pedantic -I$SCRIPT_DIR/include"
SRC="$SCRIPT_DIR/src/main.c"
OUT=$SCRIPT_DIR/main
# STATE_TABLE
$CC $CFLAGS -I$SCRIPT_DIR/include/lexer $SCRIPT_DIR/generate_state_table.c -o $SCRIPT_DIR/gentable
$SCRIPT_DIR/gentable
# DSTRING
CFLAGS+=" -Iinclude/dstring"
SRC+=" src/dstring/*.c"
CFLAGS+=" -I$SCRIPT_DIR/include/dstring"
SRC+=" $SCRIPT_DIR/src/dstring/*.c"
# JSON_ENTITIES
CFLAGS+=" -Iinclude/json_entities"
SRC+=" src/json_entities/*.c"
CFLAGS+=" -I$SCRIPT_DIR/include/json_entities"
SRC+=" $SCRIPT_DIR/src/json_entities/*.c"
# LEXER
CFLAGS+=" -Iinclude/lexer"
SRC+=" src/lexer/*.c"
CFLAGS+=" -I$SCRIPT_DIR/include/lexer"
SRC+=" $SCRIPT_DIR/src/lexer/*.c"
# PARSER
CFLAGS+=" -Iinclude/parser"
SRC+=" src/parser/*.c"
CFLAGS+=" -I$SCRIPT_DIR/include/parser"
SRC+=" $SCRIPT_DIR/src/parser/*.c"
$CC $CFLAGS $SRC -o $OUT

File diff suppressed because it is too large Load Diff

View File

@ -6,6 +6,7 @@ typedef enum {
LEXER_STATE_ERROR,
LEXER_STATE_START,
LEXER_STATE_VALUE,
LEXER_STATE_VALUE_END,
// COLLECTION STATES
LEXER_STATE_OBJECT_START,
LEXER_STATE_OBJECT,
@ -16,6 +17,7 @@ typedef enum {
LEXER_STATE_LAST_COLLECTION,
// OBJECT STATES
LEXER_STATE_KEY,
LEXER_STATE_KEY_END,
// NUMBER STATES
LEXER_STATE_DECIMAL,
LEXER_STATE_NUMBER,

View File

@ -1,38 +1,42 @@
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
// WHITE_SPACE | OPEN_BRACE | CLOSE_BRACE | OPEN_BRACKET | CLOSE_BRACKET | COMMA | COLON | DOUBLE_QUOTE | BACK_SLASH | FORWARD_SLASH | LOWER_A | LOWER_B | LOWER_C | LOWER_D | LOWER_E | LOWER_F | LOWER_L | LOWER_N | LOWER_R | LOWER_S | LOWER_T | LOWER_U | UPPER_A | UPPER_B | UPPER_C | UPPER_D | UPPER_E | UPPER_F | MINUS | PLUS | DECIMAL | ZERO | NON_ZERO | OTHER |
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_START, LEXER_STATE_OBJECT_START, LEXER_STATE_ERROR, LEXER_STATE_ARRAY_START, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_VALUE, LEXER_STATE_OBJECT_START, LEXER_STATE_ERROR, LEXER_STATE_ARRAY_START, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_STRING, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_F, LEXER_STATE_ERROR, LEXER_STATE_N, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_T, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_NUMBER, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_DECIMAL, LEXER_STATE_NUMBER, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_OBJECT, LEXER_STATE_ERROR, LEXER_STATE_OBJECT_END, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_KEY, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_ARRAY, LEXER_STATE_OBJECT_START, LEXER_STATE_ERROR, LEXER_STATE_ARRAY_START, LEXER_STATE_ARRAY_END, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_STRING, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_F, LEXER_STATE_ERROR, LEXER_STATE_N, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_T, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_NUMBER, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_DECIMAL, LEXER_STATE_NUMBER, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_LAST_COLLECTION, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_FRACTION, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_NUMBER_END, LEXER_STATE_ERROR, LEXER_STATE_OBJECT_END, LEXER_STATE_ERROR, LEXER_STATE_ARRAY_END, LEXER_STATE_VALUE_END, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_FRACTION, LEXER_STATE_NUMBER, LEXER_STATE_NUMBER, LEXER_STATE_ERROR, },
{ LEXER_STATE_NUMBER_END, LEXER_STATE_ERROR, LEXER_STATE_OBJECT_END, LEXER_STATE_ERROR, LEXER_STATE_ARRAY_END, LEXER_STATE_VALUE_END, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_EXPONENT, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_EXPONENT, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_FRACTION, LEXER_STATE_FRACTION, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_EXP_SIGN, LEXER_STATE_EXP_SIGN, LEXER_STATE_ERROR, LEXER_STATE_POWER, LEXER_STATE_POWER, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_POWER, LEXER_STATE_POWER, LEXER_STATE_ERROR, },
{ LEXER_STATE_NUMBER_END, LEXER_STATE_ERROR, LEXER_STATE_OBJECT_END, LEXER_STATE_ERROR, LEXER_STATE_ARRAY_END, LEXER_STATE_VALUE_END, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_POWER, LEXER_STATE_POWER, LEXER_STATE_ERROR, },
{ LEXER_STATE_NUMBER_END, LEXER_STATE_ERROR, LEXER_STATE_OBJECT_END, LEXER_STATE_ERROR, LEXER_STATE_ARRAY_END, LEXER_STATE_VALUE_END, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING_END, LEXER_STATE_ESCAPE_SEQUENCE, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, },
{ LEXER_STATE_STRING_END, LEXER_STATE_ERROR, LEXER_STATE_OBJECT_END, LEXER_STATE_ERROR, LEXER_STATE_ARRAY_END, LEXER_STATE_VALUE_END, LEXER_STATE_KEY_END, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_ERROR, LEXER_STATE_STRING, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_STRING, LEXER_STATE_ERROR, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_ERROR, LEXER_STATE_STRING, LEXER_STATE_UNICODE_HEX1, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_UNICODE_HEX2, LEXER_STATE_UNICODE_HEX2, LEXER_STATE_UNICODE_HEX2, LEXER_STATE_UNICODE_HEX2, LEXER_STATE_UNICODE_HEX2, LEXER_STATE_UNICODE_HEX2, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_UNICODE_HEX2, LEXER_STATE_UNICODE_HEX2, LEXER_STATE_UNICODE_HEX2, LEXER_STATE_UNICODE_HEX2, LEXER_STATE_UNICODE_HEX2, LEXER_STATE_UNICODE_HEX2, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_UNICODE_HEX2, LEXER_STATE_UNICODE_HEX2, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_UNICODE_HEX3, LEXER_STATE_UNICODE_HEX3, LEXER_STATE_UNICODE_HEX3, LEXER_STATE_UNICODE_HEX3, LEXER_STATE_UNICODE_HEX3, LEXER_STATE_UNICODE_HEX3, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_UNICODE_HEX3, LEXER_STATE_UNICODE_HEX3, LEXER_STATE_UNICODE_HEX3, LEXER_STATE_UNICODE_HEX3, LEXER_STATE_UNICODE_HEX3, LEXER_STATE_UNICODE_HEX3, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_UNICODE_HEX3, LEXER_STATE_UNICODE_HEX3, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_UNICODE_HEX4, LEXER_STATE_UNICODE_HEX4, LEXER_STATE_UNICODE_HEX4, LEXER_STATE_UNICODE_HEX4, LEXER_STATE_UNICODE_HEX4, LEXER_STATE_UNICODE_HEX4, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_UNICODE_HEX4, LEXER_STATE_UNICODE_HEX4, LEXER_STATE_UNICODE_HEX4, LEXER_STATE_UNICODE_HEX4, LEXER_STATE_UNICODE_HEX4, LEXER_STATE_UNICODE_HEX4, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_UNICODE_HEX4, LEXER_STATE_UNICODE_HEX4, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_STRING, LEXER_STATE_STRING, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_TR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_TRU, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_TRUE, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_FA, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_FAL, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_FALS, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_FALSE, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_NU, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_NUL, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_NULL, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },
{ LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, },
{ LEXER_STATE_KEYWORD_END, LEXER_STATE_ERROR, LEXER_STATE_OBJECT_END, LEXER_STATE_ERROR, LEXER_STATE_ARRAY_END, LEXER_STATE_VALUE_END, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, },

View File

@ -1,3 +0,0 @@
#!/bin/bash
clang -Iinclude -Iinclude/lexer generate_state_table.c -o gentable

View File

@ -95,6 +95,9 @@ struct lexer_s {
dstr_t *error_message;
};
#if 0
INTERNAL lexer_input_t char_type(char input);
#endif
INTERNAL void stack_push(state_stack_t *stack, lexer_state_t value);
INTERNAL lexer_state_t stack_pop(state_stack_t *stack);
@ -298,6 +301,83 @@ void print_token(token_t token) {
printf("}\n");
}
#if 0
INTERNAL lexer_input_t char_type(char input) {
if (isspace(input)) {
return LEXER_INPUT_WHITE_SPACE;
} else if (input >= '1' && input <= '9') {
return LEXER_INPUT_NON_ZERO;
}
switch (input) {
case '{':
return LEXER_INPUT_OPEN_BRACE;
case '}':
return LEXER_INPUT_CLOSE_BRACE;
case '[':
return LEXER_INPUT_OPEN_BRACKET;
case ']':
return LEXER_INPUT_CLOSE_BRACKET;
case ',':
return LEXER_INPUT_COMMA;
case ':':
return LEXER_INPUT_COLON;
case '"':
return LEXER_INPUT_DOUBLE_QUOTE;
case '\\':
return LEXER_INPUT_BACK_SLASH;
case '/':
return LEXER_INPUT_FORWARD_SLASH;
case 'a':
return LEXER_INPUT_LOWER_A;
case 'b':
return LEXER_INPUT_LOWER_B;
case 'c':
return LEXER_INPUT_LOWER_C;
case 'd':
return LEXER_INPUT_LOWER_D;
case 'e':
return LEXER_INPUT_LOWER_E;
case 'f':
return LEXER_INPUT_LOWER_F;
case 'l':
return LEXER_INPUT_LOWER_L;
case 'n':
return LEXER_INPUT_LOWER_N;
case 'r':
return LEXER_INPUT_LOWER_R;
case 's':
return LEXER_INPUT_LOWER_S;
case 't':
return LEXER_INPUT_LOWER_T;
case 'u':
return LEXER_INPUT_LOWER_U;
case 'A':
return LEXER_INPUT_UPPER_A;
case 'B':
return LEXER_INPUT_UPPER_B;
case 'C':
return LEXER_INPUT_UPPER_C;
case 'D':
return LEXER_INPUT_UPPER_D;
case 'E':
return LEXER_INPUT_UPPER_E;
case 'F':
return LEXER_INPUT_UPPER_F;
case '-':
return LEXER_INPUT_MINUS;
case '+':
return LEXER_INPUT_PLUS;
case '.':
return LEXER_INPUT_DECIMAL;
case '0':
return LEXER_INPUT_ZERO;
default:
return LEXER_INPUT_OTHER;
}
}
#endif
void stack_push(state_stack_t *stack, lexer_state_t state) {
if (stack->size + 1 >= MAX_STACK_CAPACITY) {
return;
@ -772,8 +852,6 @@ lexer_state_t handle_number(lexer_t *lexer, char input) {
return LEXER_STATE_FRACTION;
} else if (input == '}' || input == ']') {
// TODO (Abdelrahman): Set the token type correctly based on whether the
// number is an integer or a double
lexer->token_ready = true;
u64 column = lexer->column - dstr_length(lexer->current_string);
@ -783,8 +861,6 @@ lexer_state_t handle_number(lexer_t *lexer, char input) {
return handle_collection_end(lexer, input);
} else if (input == ',') {
// TODO (Abdelrahman): Set the token type correctly based on whether the
// number is an integer or a double
lexer->token_ready = true;
u64 column = lexer->column - dstr_length(lexer->current_string);
@ -794,8 +870,6 @@ lexer_state_t handle_number(lexer_t *lexer, char input) {
return lexer->stack.stack[lexer->stack.size - 1];
} else if (isspace(input)) {
// TODO (Abdelrahman): Set the token type correctly based on whether the
// number is an integer or a double
lexer->token_ready = true;
u64 column = lexer->column - dstr_length(lexer->current_string);
@ -815,8 +889,6 @@ lexer_state_t handle_fraction(lexer_t *lexer, char input) {
return LEXER_STATE_FRACTION;
} else if (input == '}' || input == ']') {
// TODO (Abdelrahman): Set the token type correctly based on whether the
// number is an integer or a double
lexer->token_ready = true;
u64 column = lexer->column - dstr_length(lexer->current_string);
@ -830,8 +902,6 @@ lexer_state_t handle_fraction(lexer_t *lexer, char input) {
return LEXER_STATE_EXPONENT;
} else if (input == ',') {
// TODO (Abdelrahman): Set the token type correctly based on whether the
// number is an integer or a double
lexer->token_ready = true;
u64 column = lexer->column - dstr_length(lexer->current_string);
@ -841,8 +911,6 @@ lexer_state_t handle_fraction(lexer_t *lexer, char input) {
return lexer->stack.stack[lexer->stack.size - 1];
} else if (isspace(input)) {
// TODO (Abdelrahman): Set the token type correctly based on whether the
// number is an integer or a double
lexer->token_ready = true;
u64 column = lexer->column - dstr_length(lexer->current_string);
@ -884,8 +952,6 @@ lexer_state_t handle_power(lexer_t *lexer, char input) {
return LEXER_STATE_POWER;
} else if (input == '}' || input == ']') {
// TODO (Abdelrahman): Set the token type correctly based on whether the
// number is an integer or a double
lexer->token_ready = true;
u64 column = lexer->column - dstr_length(lexer->current_string);
@ -895,8 +961,6 @@ lexer_state_t handle_power(lexer_t *lexer, char input) {
return handle_collection_end(lexer, input);
} else if (input == ',') {
// TODO (Abdelrahman): Set the token type correctly based on whether the
// number is an integer or a double
lexer->token_ready = true;
u64 column = lexer->column - dstr_length(lexer->current_string);
@ -906,8 +970,6 @@ lexer_state_t handle_power(lexer_t *lexer, char input) {
return lexer->stack.stack[lexer->stack.size - 1];
} else if (isspace(input)) {
// TODO (Abdelrahman): Set the token type correctly based on whether the
// number is an integer or a double
lexer->token_ready = true;
u64 column = lexer->column - dstr_length(lexer->current_string);
@ -925,8 +987,6 @@ lexer_state_t handle_number_end(lexer_t *lexer, char input) {
if (isspace(input)) {
return LEXER_STATE_NUMBER_END;
} else if (input == ',') {
// TODO (Abdelrahman): Set the token type correctly based on whether the
// number is an integer or a double
lexer->token_ready = true;
u64 column = lexer->column - dstr_length(lexer->current_string);