summaryrefslogtreecommitdiff
path: root/core/parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'core/parser.c')
-rw-r--r--core/parser.c55
1 files changed, 55 insertions, 0 deletions
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 <stdint.h>
+#include <stddef.h>
+#include <atas/lexer.h>
+
+/* 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;
+}