From 682972020b2828867b4cffc80eb2dbe0e06ce93b Mon Sep 17 00:00:00 2001 From: katherine Date: Sun, 12 May 2019 16:07:11 -0700 Subject: implement internal parser --- src/parse.h | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) (limited to 'src/parse.h') diff --git a/src/parse.h b/src/parse.h index 9f9b4e3..1bc6710 100644 --- a/src/parse.h +++ b/src/parse.h @@ -1,6 +1,68 @@ #ifndef CONFCONF_PARSE_H #define CONFCONF_PARSE_H +#include "tok.h" +#include + +#include + +#define PARSE_DEFTYPE_MAX_LEN 32 + +enum parse_type_e { + PARSE_TYPE_BOOL = 0, + PARSE_TYPE_STRING = 1, + PARSE_TYPE_INT = 2, + PARSE_TYPE_UINT = 3, + PARSE_TYPE_DEFTYPE = 4, + + PARSE_TYPE_ARRAY_BOOL = 5, + PARSE_TYPE_ARRAY_STRING = 6, + PARSE_TYPE_ARRAY_INT = 7, + PARSE_TYPE_ARRAY_UINT = 8, + PARSE_TYPE_ARRAY_DEFTYPE = 9, + + PARSE_TYPE_HASH_BOOL = 10, + PARSE_TYPE_HASH_STRING = 11, + PARSE_TYPE_HASH_INT = 12, + PARSE_TYPE_HASH_UINT = 13, + PARSE_TYPE_HASH_DEFTYPE = 14, +}; + +struct parse_deftype_s { + char name[TOK_MAX_LEN]; + size_t line; + size_t col; + bool is_union; + unsigned member_list_len; + enum parse_type_e member_type_list[PARSE_DEFTYPE_MAX_LEN]; + char member_name_list[PARSE_DEFTYPE_MAX_LEN][TOK_MAX_LEN]; + UT_hash_handle hh; +}; + +struct parse_var_s { + char name[TOK_MAX_LEN]; + size_t line; + size_t col; + bool is_required; + enum parse_type_e type; + char deftype_name[TOK_MAX_LEN]; + UT_hash_handle hh; +}; + +struct parse_result_s { + unsigned long hkey_size; + bool hkey_size_seen; + char hkey_name[TOK_MAX_LEN]; + bool hkey_name_seen; + char fun_suf[TOK_MAX_LEN]; + bool fun_suf_seen; + struct parse_deftype_s *deftypes; + struct parse_var_s *vars; +}; + +struct parse_result_s parse(FILE *f, const char *fname); + +void parse_result_wipe(struct parse_result_s *r); #endif -- cgit v1.2.3