From: NeilBrown Date: Thu, 25 Jul 2013 10:23:26 +0000 (+1000) Subject: parsergen: report some tokens better when tracing. X-Git-Tag: indentparser~5 X-Git-Url: https://ocean-lang.org/code/?p=ocean;a=commitdiff_plain;h=d243d5afd93bd74abb830537a0f90d05a503afb3 parsergen: report some tokens better when tracing. Some tokens are best traced by giving their name rather than their content. e.g. newline. So make a special case of those. Signed-off-by: NeilBrown --- diff --git a/csrc/parsergen.mdc b/csrc/parsergen.mdc index df217dd..eac3255 100644 --- a/csrc/parsergen.mdc +++ b/csrc/parsergen.mdc @@ -2462,6 +2462,13 @@ end inside square brackets. ###### parser functions + static char *reserved_words[] = { + [TK_error] = "ERROR", + [TK_in] = "IN", + [TK_out] = "OUT", + [TK_newline] = "NEWLINE", + [TK_eof] = "$eof", + }; void parser_trace(FILE *trace, struct parser *p, struct token *tk, const struct state states[], const char *non_term[], int knowns) @@ -2470,7 +2477,10 @@ end inside square brackets. for (i = 0; i < p->tos; i++) { int sym = p->stack[i].sym; fprintf(trace, "(%d) ", p->stack[i].state); - if (sym < TK_reserved + knowns) { + if (sym < TK_reserved && + reserved_words[sym] != NULL) + fputs(reserved_words[sym], trace); + else if (sym < TK_reserved + knowns) { struct token *t = p->asn_stack[i]; text_dump(trace, t->txt, 20); } else @@ -2479,7 +2489,11 @@ end inside square brackets. fputs(" ", trace); } fprintf(trace, "(%d) [", p->state); - text_dump(trace, tk->txt, 20); + if (tk->num < TK_reserved && + reserved_words[tk->num] != NULL) + fputs(reserved_words[tk->num], trace); + else + text_dump(trace, tk->txt, 20); fputs("]\n", trace); }