summaryrefslogtreecommitdiff
path: root/core/parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'core/parser.c')
-rw-r--r--core/parser.c48
1 files changed, 48 insertions, 0 deletions
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;
+}