From 7ea108fa6749d3e3dc688c1499fbabf636de1e84 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sat, 27 Apr 2019 16:41:07 +0200 Subject: [PATCH] traces: use colors for the semantic values This makes reading the trace slightly easier. It would be very nice to highlight the "big steps", especially reductions. But this is a private experiment: do not use it. * data/diagnostics.css (value): New. * src/parse-gram.y: Use no delimiters and no c quotation for strings to facilitate debugging. (tron, troff, TRACE): New. Not very elegant, but until there is support for printf-formats in libtextstyle, it shall be enough. --- data/diagnostics.css | 2 ++ data/skeletons/c.m4 | 6 ++++-- data/skeletons/lalr1.java | 4 ++-- src/parse-gram.y | 21 +++++++++++++++++++-- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/data/diagnostics.css b/data/diagnostics.css index 515802ec..7136a80b 100644 --- a/data/diagnostics.css +++ b/data/diagnostics.css @@ -6,3 +6,5 @@ .warning { color: purple; } .error { color: red; } .note { color: cyan; } +/* Semantic values in Bison's parser traces. */ +.value { color: green; } diff --git a/data/skeletons/c.m4 b/data/skeletons/c.m4 index 5987232d..fcf58a84 100644 --- a/data/skeletons/c.m4 +++ b/data/skeletons/c.m4 @@ -544,8 +544,10 @@ m4_if(b4_skeleton, ["yacc.c"], YYPRINT (yyo, yytoknum[yytype], *yyvaluep); # endif ]])dnl - b4_symbol_actions([printer])[ -} +b4_percent_code_get([[pre-printer]])dnl + b4_symbol_actions([printer]) +b4_percent_code_get([[post-printer]])dnl +[} /*---------------------------. diff --git a/data/skeletons/lalr1.java b/data/skeletons/lalr1.java index 62ae80da..5a77c692 100644 --- a/data/skeletons/lalr1.java +++ b/data/skeletons/lalr1.java @@ -87,8 +87,8 @@ b4_output_begin([b4_parser_file_name])[ ]])[ ]b4_user_pre_prologue[ ]b4_user_post_prologue[ -]b4_percent_code_get([[imports]]) -[/** +]b4_percent_code_get([[imports]])[ +/** * A Bison parser, automatically generated from ]m4_bpatsubst(b4_file_name, [^"\(.*\)"$], [\1])[. * * @@author LALR (1) parser skeleton written by Paolo Bonzini. diff --git a/src/parse-gram.y b/src/parse-gram.y index 1c2199dc..263db619 100644 --- a/src/parse-gram.y +++ b/src/parse-gram.y @@ -112,6 +112,10 @@ #define YYTYPE_INT8 int_fast8_t #define YYTYPE_UINT16 uint_fast16_t #define YYTYPE_UINT8 uint_fast8_t + + /* Add style to semantic values in traces. */ + static void tron (FILE *yyo); + static void troff (FILE *yyo); } %define api.header.include {"parse-gram.h"} @@ -202,12 +206,15 @@ %token TAG_ANY "<*>" %token TAG_NONE "<>" + /* Experimental feature, don't rely on it. */ +%code pre-printer {tron (yyo);} +%code post-printer {troff (yyo);} + %type CHAR %printer { fputs (char_name ($$), yyo); } %type "{...}" "%?{...}" "%{...%}" EPILOGUE STRING -%printer { fputs (quotearg_style (c_quoting_style, $$), yyo); } STRING -%printer { fprintf (yyo, "{\n%s\n}", $$); } +%printer { fputs ($$, yyo); } %type BRACKETED_ID ID ID_COLON @@ -1054,3 +1061,13 @@ current_lhs (symbol *sym, location loc, named_ref *ref) free (current_lhs_named_ref); current_lhs_named_ref = ref; } + +static void tron (FILE *yyo) +{ + begin_use_class ("value", yyo); +} + +static void troff (FILE *yyo) +{ + end_use_class ("value", yyo); +}