From 34fc6119714b999bae5aaf08697453dca500f705 Mon Sep 17 00:00:00 2001 From: "Ian M." Date: Sat, 3 Oct 2026 06:25:43 +0000 Subject: frontend: Add lexer+parser groundwork Signed-off-by: Ian M. --- core/parser.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 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..6cf0a4e --- /dev/null +++ b/core/parser.c @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2026, Apollo Telephone Laboratories. + * Provided under the BSD-3 clause. + */ + +#include +#include +#include + +/* Symbolic token */ +#define SYMTOK(TOK) \ + "[" TOK "]" + +/* Literal token */ +#define LITTOK(TOK) \ + "'" TOK "'" + +/* + * Safe macro to index toktab + */ +#define TOK_STR(TT) \ + ((TT) >= TT_MAX) \ + ? "bad" \ + : toktab[(TT)] + +/* + * Lookup table to convert token constants into + * strings. + */ +static const char *toktab[] = { + [TT_NONE] = SYMTOK("NONE"), + [TT_COMMA] = LITTOK(",") +}; + +int +atas_parse(struct atas_state *state) +{ + int error; + struct atas_token tok; + + if (state == NULL) { + return -1; + } + + for (;;) { + error = atas_lexer_scan(state, &tok); + if (error < 0) { + break; + } + + printf("got token %s\n", TOK_STR(tok.type)); + } + + return 0; +} -- cgit v1.2.3