summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/defconf.c8
-rw-r--r--core/parser.c48
2 files changed, 56 insertions, 0 deletions
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 <stdlib.h>
#include <string.h>
#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;
+}