Updated json_entities

This commit is contained in:
Abdelrahman Said 2023-06-27 23:16:26 +01:00
parent 1e510411dc
commit 14ad503d4d
4 changed files with 94 additions and 27 deletions

View File

@ -143,12 +143,12 @@
"-x", "-x",
"c", "c",
"-o", "-o",
"/tmp/main-8f77b1.o", "/tmp/main-a21b7e.o",
"src/main.c" "src/main.c"
], ],
"directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json",
"file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/main.c", "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/main.c",
"output": "/tmp/main-8f77b1.o" "output": "/tmp/main-a21b7e.o"
}, },
{ {
"arguments": [ "arguments": [
@ -214,12 +214,12 @@
"-x", "-x",
"c", "c",
"-o", "-o",
"/tmp/dstring-e11abe.o", "/tmp/dstring-17d81f.o",
"src/dstring/dstring.c" "src/dstring/dstring.c"
], ],
"directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json",
"file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/dstring/dstring.c", "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": [ "arguments": [
@ -285,12 +285,12 @@
"-x", "-x",
"c", "c",
"-o", "-o",
"/tmp/json_entities-caa676.o", "/tmp/json_entities-66f73b.o",
"src/json_entities/json_entities.c" "src/json_entities/json_entities.c"
], ],
"directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", "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", "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": [ "arguments": [
@ -356,11 +356,11 @@
"-x", "-x",
"c", "c",
"-o", "-o",
"/tmp/lexer-7fcb6e.o", "/tmp/lexer-66d0ff.o",
"src/lexer/lexer.c" "src/lexer/lexer.c"
], ],
"directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json",
"file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/lexer.c", "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/lexer.c",
"output": "/tmp/lexer-7fcb6e.o" "output": "/tmp/lexer-66d0ff.o"
} }
] ]

View File

@ -5,21 +5,24 @@
#include "dstring.h" #include "dstring.h"
#include <stdbool.h> #include <stdbool.h>
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 { typedef enum {
JVAL_OBJECT, JSON_VALUE_COLLECTION,
JVAL_ARRAY, JSON_VALUE_STRING,
JVAL_STRING, JSON_VALUE_INTEGER,
JVAL_INTEGER, JSON_VALUE_DOUBLE,
JVAL_DOUBLE, JSON_VALUE_BOOLEAN,
JVAL_BOOLEAN, JSON_VALUE_NULL,
JVAL_NULL, } jval_type;
} jval_type_t;
struct json_value { struct jval {
jval_type_t type; jval_type type;
union { union {
jcoll_t *collection;
dstr_t *string; dstr_t *string;
i64 num_int; i64 num_int;
f64 num_dbl; f64 num_dbl;
@ -27,4 +30,35 @@ struct json_value {
}; };
}; };
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 #endif // !JSON_ENTITIES_H

View File

@ -23,10 +23,10 @@ typedef enum {
JSON_TRUE, JSON_TRUE,
JSON_FALSE, JSON_FALSE,
JSON_NULL, JSON_NULL,
} jval_type_t; } jval_type;
struct json_val { struct json_val {
jval_type_t type; jval_type type;
union { union {
jcoll_t *collection; jcoll_t *collection;
const char *string; const char *string;

33
token_stream_example Normal file
View File

@ -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}