From 4f3f4cb26d9eee09aebdd37765208943e9ef6214 Mon Sep 17 00:00:00 2001 From: "Chloe M." Date: Sun, 23 Aug 2026 06:03:49 +0000 Subject: core: parser: Add parser groundwork Signed-off-by: Chloe M. --- core/defconf.c | 8 ++++++++ core/parser.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 core/parser.c (limited to 'core') diff --git a/core/defconf.c b/core/defconf.c index 4444179..be55708 100644 --- a/core/defconf.c +++ b/core/defconf.c @@ -8,6 +8,7 @@ #include #include #include "defconf/state.h" +#include "defconf/parser.h" /* Globals */ static char *config_path = NULL; @@ -24,11 +25,18 @@ static int defconf_run(void) { struct defconf_state state; + int error; if (defconf_state_init(config_path, &state) < 0) { return -1; } + /* Begin parsing the config */ + if ((error = parse_begin(&state)) < 0) { + defconf_state_destroy(&state); + return error; + } + defconf_state_destroy(&state); return 0; } diff --git a/core/parser.c b/core/parser.c new file mode 100644 index 0000000..727d5e1 --- /dev/null +++ b/core/parser.c @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2026, Apollo Telephone Laboratories. + * Provided under the BSD-3 clause. + */ + +#include "defconf/parser.h" +#include "defconf/lexer.h" +#include "defconf/token.h" + +/* Symbolic token */ +#define SYMTOK(TOKSTR) \ + "[" TOKSTR "]" + +/* Literal token */ +#define TOKLIT(TOKSTR) \ + "'" TOKSTR "'" + +/* Safe macro to convert token type to string */ +#define TOKSTR(TT) \ + ((TT) >= _TT_MAX) \ + ? "bad" \ + : toktab[(TT)] + +/* Token to string table */ +static const char *toktab[_TT_MAX] = { + [TT_NONE] = SYMTOK("none"), + [TT_DEFINE] = SYMTOK("define"), + [TT_TRUE] = TOKLIT("true"), + [TT_FALSE] = TOKLIT("false"), + [TT_INTLIT] = SYMTOK("int"), + [TT_IDENT] = SYMTOK("ident") +}; + +int +parse_begin(struct defconf_state *state) +{ + struct token tok; + + if (state == NULL) { + return -1; + } + + while (lexer_scan(state, &tok) == 0) { + printf("got %s\n", TOKSTR(tok.type)); + } + + return 0; +} -- cgit v1.2.3