From 14ad503d4d5db56ab86e8275584e7141ec1deb52 Mon Sep 17 00:00:00 2001 From: Abdelrahman Said Date: Tue, 27 Jun 2023 23:16:26 +0100 Subject: [PATCH] Updated json_entities --- compile_commands.json | 16 +++---- include/json_entities/json_entities.h | 68 ++++++++++++++++++++------- include/json_test.h | 4 +- token_stream_example | 33 +++++++++++++ 4 files changed, 94 insertions(+), 27 deletions(-) create mode 100644 token_stream_example diff --git a/compile_commands.json b/compile_commands.json index 692279d..7d0b180 100644 --- a/compile_commands.json +++ b/compile_commands.json @@ -143,12 +143,12 @@ "-x", "c", "-o", - "/tmp/main-8f77b1.o", + "/tmp/main-a21b7e.o", "src/main.c" ], "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/main.c", - "output": "/tmp/main-8f77b1.o" + "output": "/tmp/main-a21b7e.o" }, { "arguments": [ @@ -214,12 +214,12 @@ "-x", "c", "-o", - "/tmp/dstring-e11abe.o", + "/tmp/dstring-17d81f.o", "src/dstring/dstring.c" ], "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/dstring/dstring.c", - "output": "/tmp/dstring-e11abe.o" + "output": "/tmp/dstring-17d81f.o" }, { "arguments": [ @@ -285,12 +285,12 @@ "-x", "c", "-o", - "/tmp/json_entities-caa676.o", + "/tmp/json_entities-66f73b.o", "src/json_entities/json_entities.c" ], "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/json_entities/json_entities.c", - "output": "/tmp/json_entities-caa676.o" + "output": "/tmp/json_entities-66f73b.o" }, { "arguments": [ @@ -356,11 +356,11 @@ "-x", "c", "-o", - "/tmp/lexer-7fcb6e.o", + "/tmp/lexer-66d0ff.o", "src/lexer/lexer.c" ], "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/lexer.c", - "output": "/tmp/lexer-7fcb6e.o" + "output": "/tmp/lexer-66d0ff.o" } ] diff --git a/include/json_entities/json_entities.h b/include/json_entities/json_entities.h index 476ce1f..ae1fce2 100644 --- a/include/json_entities/json_entities.h +++ b/include/json_entities/json_entities.h @@ -5,26 +5,60 @@ #include "dstring.h" #include -typedef struct json_value jval_t; +typedef struct jentity jentity_t; +typedef struct jcoll jcoll_t; +typedef struct jval jval_t; +typedef struct jpair jpair_t; typedef enum { - JVAL_OBJECT, - JVAL_ARRAY, - JVAL_STRING, - JVAL_INTEGER, - JVAL_DOUBLE, - JVAL_BOOLEAN, - JVAL_NULL, -} jval_type_t; + JSON_VALUE_COLLECTION, + JSON_VALUE_STRING, + JSON_VALUE_INTEGER, + JSON_VALUE_DOUBLE, + JSON_VALUE_BOOLEAN, + JSON_VALUE_NULL, +} jval_type; -struct json_value { - jval_type_t type; - union { - dstr_t *string; - i64 num_int; - f64 num_dbl; - bool boolean; - }; +struct jval { + jval_type type; + union { + jcoll_t *collection; + dstr_t *string; + i64 num_int; + f64 num_dbl; + bool boolean; + }; +}; + +struct jpair { + dstr_t *key; + jval_t value; +}; + +typedef enum { + JVAL_SINGLE, + JVAL_PAIR, +} jentity_type; + +struct jentity { + jentity_type type; + union { + jval_t value; + jpair_t pair; + }; + jentity_t *parent; + jentity_t *next; +}; + +typedef enum { + JCOLL_OBJECT, + JCOLL_ARRAY, +} jcoll_type; + +struct jcoll { + u64 size; + jcoll_type type; + jentity_t *first_child; }; #endif // !JSON_ENTITIES_H diff --git a/include/json_test.h b/include/json_test.h index a28460a..410669f 100644 --- a/include/json_test.h +++ b/include/json_test.h @@ -23,10 +23,10 @@ typedef enum { JSON_TRUE, JSON_FALSE, JSON_NULL, -} jval_type_t; +} jval_type; struct json_val { - jval_type_t type; + jval_type type; union { jcoll_t *collection; const char *string; diff --git a/token_stream_example b/token_stream_example new file mode 100644 index 0000000..1e8625a --- /dev/null +++ b/token_stream_example @@ -0,0 +1,33 @@ +{LINE: 1, COLUMN: 0, TYPE: TK_L_BRACE, VALUE: N/A} +{LINE: 2, COLUMN: 2, TYPE: TK_STR_KEY, VALUE: menu} +{LINE: 2, COLUMN: 9, TYPE: TK_L_BRACE, VALUE: N/A} +{LINE: 3, COLUMN: 3, TYPE: TK_STR_KEY, VALUE: id} +{LINE: 3, COLUMN: 9, TYPE: TK_STR_VAL, VALUE: file} +{LINE: 4, COLUMN: 3, TYPE: TK_STR_KEY, VALUE: value} +{LINE: 4, COLUMN: 12, TYPE: TK_STR_VAL, VALUE: File} +{LINE: 5, COLUMN: 3, TYPE: TK_STR_KEY, VALUE: popup} +{LINE: 5, COLUMN: 11, TYPE: TK_L_BRACE, VALUE: N/A} +{LINE: 6, COLUMN: 4, TYPE: TK_STR_KEY, VALUE: menuitem} +{LINE: 6, COLUMN: 15, TYPE: TK_L_BRACKET, VALUE: N/A} +{LINE: 7, COLUMN: 4, TYPE: TK_L_BRACE, VALUE: N/A} +{LINE: 8, COLUMN: 6, TYPE: TK_STR_KEY, VALUE: value} +{LINE: 8, COLUMN: 15, TYPE: TK_STR_VAL, VALUE: New} +{LINE: 9, COLUMN: 6, TYPE: TK_STR_KEY, VALUE: onclick} +{LINE: 9, COLUMN: 17, TYPE: TK_STR_VAL, VALUE: CreateNewDoc()} +{LINE: 10, COLUMN: 4, TYPE: TK_R_BRACE, VALUE: N/A} +{LINE: 11, COLUMN: 4, TYPE: TK_L_BRACE, VALUE: N/A} +{LINE: 12, COLUMN: 6, TYPE: TK_STR_KEY, VALUE: value} +{LINE: 12, COLUMN: 15, TYPE: TK_STR_VAL, VALUE: Open} +{LINE: 13, COLUMN: 6, TYPE: TK_STR_KEY, VALUE: onclick} +{LINE: 13, COLUMN: 17, TYPE: TK_STR_VAL, VALUE: OpenDoc()} +{LINE: 14, COLUMN: 4, TYPE: TK_R_BRACE, VALUE: N/A} +{LINE: 15, COLUMN: 4, TYPE: TK_L_BRACE, VALUE: N/A} +{LINE: 16, COLUMN: 6, TYPE: TK_STR_KEY, VALUE: value} +{LINE: 16, COLUMN: 15, TYPE: TK_STR_VAL, VALUE: Close} +{LINE: 17, COLUMN: 6, TYPE: TK_STR_KEY, VALUE: onclick} +{LINE: 17, COLUMN: 17, TYPE: TK_STR_VAL, VALUE: CloseDoc()} +{LINE: 18, COLUMN: 4, TYPE: TK_R_BRACE, VALUE: N/A} +{LINE: 19, COLUMN: 3, TYPE: TK_R_BRACKET, VALUE: N/A} +{LINE: 20, COLUMN: 2, TYPE: TK_R_BRACE, VALUE: N/A} +{LINE: 21, COLUMN: 1, TYPE: TK_R_BRACE, VALUE: N/A} +{LINE: 22, COLUMN: 0, TYPE: TK_R_BRACE, VALUE: N/A}