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/parser.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 core/parser.c (limited to 'core/parser.c') 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