/* * Copyright (c) 2026, Chloe M. * Provided under the BSD-3 clause */ #include #include #include "cescal/log.h" #include "cescal/parser.h" #include "cescal/state.h" #include "cescal/lexer.h" /* Symbolic token */ #define symtok(tok) \ "[" tok "]" /* Quoted token */ #define qtok(tok) \ "'" tok "'" /* Convert token to string */ #define tokstr1(tt) \ toktab[(tt)] /* Convert token to string */ #define tokstr(tok) \ toktab[(tok)->type] /* * Converts numeric tokens into human readable strings */ static const char *toktab[] = { [TT_NONE] = symtok("none"), [TT_IDENT] = symtok("ident"), [TT_INTLIT] = symtok("number"), [TT_LPAREN] = qtok("("), [TT_RPAREN] = qtok(")"), [TT_COMMA] = qtok(","), [TT_RETURN] = qtok("return"), [TT_PUB] = qtok("pub"), [TT_PROC] = qtok("proc"), [TT_BEGIN] = qtok("begin"), [TT_END] = qtok("end") }; int parser_parse(struct cescal_state *state) { struct token tok; if (state == NULL) { errno = EINVAL; return -1; } while (lexer_nom(state, &tok) == 0) { cc_trace("got token %s\n", tokstr(&tok)); } return 0; }