From fa8195091647391bc39089e26dd9c6f9e1f4be24 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Tue, 14 Apr 2009 06:51:01 +0200 Subject: [PATCH] variables: use `parse.assert' instead of `debug'. * src/getargs.c (getargs): Map -t to %define trace.parse. * src/scan-gram.l (%debug): Map to %define trace.parse. * data/bison.m4 (b4_percent_define_if_define): Map `.' in variable names to `_' in macro names. (b4_debug_if): Replace with... (b4_parse_trace_if): this. * data/glr.c, data/glr.cc, data/lalr1.cc, data/lalr1.java, * data/yacc.c: Adjust. * doc/bison.texinfo (Decl Summary): Document %debug as obsoleted. Use @code to label the variable list. Document the variable parse.trace. (Tracing): Promote the parse.trace variable. * TODO: %printer is not documented. --- ChangeLog | 17 ++++++++++++++ TODO | 5 +++-- data/bison.m4 | 9 ++++---- data/glr.c | 2 +- data/glr.cc | 2 +- data/lalr1.cc | 2 +- data/lalr1.java | 2 +- data/yacc.c | 2 +- doc/bison.texinfo | 56 ++++++++++++++++++++++++++++++++++------------- src/getargs.c | 6 +++-- src/scan-gram.l | 2 +- 11 files changed, 76 insertions(+), 29 deletions(-) diff --git a/ChangeLog b/ChangeLog index 85fad9f4..0513c688 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2009-04-14 Akim Demaille + + variables: use `parse.assert' instead of `debug'. + * src/getargs.c (getargs): Map -t to %define trace.parse. + * src/scan-gram.l (%debug): Map to %define trace.parse. + * data/bison.m4 (b4_percent_define_if_define): Map `.' in variable + names to `_' in macro names. + (b4_debug_if): Replace with... + (b4_parse_trace_if): this. + * data/glr.c, data/glr.cc, data/lalr1.cc, data/lalr1.java, + * data/yacc.c: Adjust. + * doc/bison.texinfo (Decl Summary): Document %debug as obsoleted. + Use @code to label the variable list. + Document the variable parse.trace. + (Tracing): Promote the parse.trace variable. + * TODO: %printer is not documented. + 2009-04-14 Akim Demaille doc: minor fixes. diff --git a/TODO b/TODO index 5ae4f707..d00092a9 100644 --- a/TODO +++ b/TODO @@ -15,8 +15,6 @@ I have seen messages like the following from GCC. :0: fatal error: opening dependency file .deps/libltdl/argz.Tpo: No such file or directory -** Document %define assert - ** Discuss about %printer/%destroy in the case of C++. It would be very nice to provide the symbol classes with an operator<< and a destructor. Unfortunately the syntax we have chosen for @@ -292,7 +290,10 @@ this issue. Does anybody have it? Some history of Bison and some bibliography would be most welcome. Are there any Texinfo standards for bibliography? +** %printer +Wow, %printer is not documented. Clearly mark YYPRINT as obsolete. +** %define assert * Java, Fortran, etc. diff --git a/data/bison.m4 b/data/bison.m4 index 89918ac2..52144e9a 100644 --- a/data/bison.m4 +++ b/data/bison.m4 @@ -668,22 +668,23 @@ m4_define([b4_percent_define_default], # b4_percent_define_if_define(VARIABLE) # ------------------------------------- # Define b4_VARIABLE_if that executes its $1 or $2 depending whether -# VARIABLE was %defined. +# VARIABLE was %defined. The character `.' in VARIABLE is mapped to `_'. m4_define([b4_percent_define_if_define_], -[m4_define([b4_$1_if], [b4_percent_define_flag_if([$1], [$2], [$3])])]) +[m4_define(m4_bpatsubst([b4_$1_if], [[.]], [_]), + [b4_percent_define_flag_if([$1], [$2], [$3])])]) m4_define([b4_percent_define_if_define], [b4_percent_define_default([[$1]], [[false]]) b4_percent_define_if_define_([$1], $[1], $[2])]) # b4_assert_if([IF-ASSERTIONS-ARE-USED], [IF-NOT]) -# b4_debug_if([IF-DEBUG-TRACES-ARE-ENABLED], [IF-NOT]) +# b4_parse_trace_if([IF-DEBUG-TRACES-ARE-ENABLED], [IF-NOT]) # b4_error_verbose_if([IF-ERRORS-ARE-VERBOSE], [IF-NOT]) # b4_lex_symbol_if([IF-YYLEX-RETURNS-A-COMPLETE-SYMBOL], [IF-NOT]) # b4_variant_if([IF-VARIANT-ARE-USED], [IF-NOT]) # ---------------------------------------------- b4_percent_define_if_define([assert]) -b4_percent_define_if_define([debug]) +b4_percent_define_if_define([parse.trace]) b4_percent_define_if_define([error_verbose]) b4_percent_define_if_define([lex_symbol]) b4_percent_define_if_define([locations]) # Whether locations are tracked. diff --git a/data/glr.c b/data/glr.c index 3add5b27..dcbc7d88 100644 --- a/data/glr.c +++ b/data/glr.c @@ -224,7 +224,7 @@ b4_defines_if([[#include "@basename(]b4_spec_defines_file[@)"]], /* Enabling traces. */ #ifndef YYDEBUG -# define YYDEBUG ]b4_debug_if([1], [0])[ +# define YYDEBUG ]b4_parse_trace_if([1], [0])[ #endif /* Enabling verbose error messages. */ diff --git a/data/glr.cc b/data/glr.cc index 0b4000a9..0d9e0496 100644 --- a/data/glr.cc +++ b/data/glr.cc @@ -239,7 +239,7 @@ b4_copyright([Skeleton interface for Bison GLR parsers in C++], /* Enabling traces. */ #ifndef YYDEBUG -# define YYDEBUG ]b4_debug_if([1], [0])[ +# define YYDEBUG ]b4_parse_trace_if([1], [0])[ #endif /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. diff --git a/data/lalr1.cc b/data/lalr1.cc index cf955edc..1791c76f 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -161,7 +161,7 @@ dnl FIXME: This is wrong, we want computed header guards. /* Enabling traces. */ #ifndef YYDEBUG -# define YYDEBUG ]b4_debug_if([1], [0])[ +# define YYDEBUG ]b4_parse_trace_if([1], [0])[ #endif /* Enabling verbose error messages. */ diff --git a/data/lalr1.java b/data/lalr1.java index b1e74f02..0140a683 100644 --- a/data/lalr1.java +++ b/data/lalr1.java @@ -21,7 +21,7 @@ b4_defines_if([b4_fatal([%s: %%defines does not make sense in Java], [b4_skeleton])]) # We don't depend on %debug in Java, but pacify warnings about non-used flags. -b4_debug_if([0], [0]) +b4_parse_trace_if([0], [0]) m4_define([b4_symbol_no_destructor_assert], [b4_symbol_if([$1], [has_destructor], diff --git a/data/yacc.c b/data/yacc.c index c02ecf2d..c0150c4c 100644 --- a/data/yacc.c +++ b/data/yacc.c @@ -192,7 +192,7 @@ m4_if(b4_prefix, [yy], [], /* Enabling traces. */ #ifndef YYDEBUG -# define YYDEBUG ]b4_debug_if([1], [0])[ +# define YYDEBUG ]b4_parse_trace_if([1], [0])[ #endif /* Enabling verbose error messages. */ diff --git a/doc/bison.texinfo b/doc/bison.texinfo index 16ffc73f..6df5617b 100644 --- a/doc/bison.texinfo +++ b/doc/bison.texinfo @@ -4840,8 +4840,8 @@ traditional Yacc prologue for C/C++, see @ref{Prologue Alternatives}. @end deffn @deffn {Directive} %debug -In the parser file, define the macro @code{YYDEBUG} to 1 if it is not -already defined, so that the debugging facilities are compiled. +Instrument the output parser for traces. Obsoleted by @samp{%define +parse.trace}. @xref{Tracing, ,Tracing Your Parser}. @end deffn @@ -4876,7 +4876,7 @@ target language and/or parser skeleton. Some of the accepted @var{variable}s are: -@itemize @bullet +@table @code @item api.pure @findex %define api.pure @@ -5001,9 +5001,27 @@ For example, if you specify: The parser namespace is @code{foo} and @code{yylex} is referenced as @code{bar::lex}. @end itemize -@end itemize +@c namespace + +@item parse.trace +@findex %define parse.trace + +@itemize +@item Languages(s): C, C++ + +@item Purpose: Require parser instrumentation for tracing. +In C/C++, define the macro @code{YYDEBUG} to 1 in the parser file if it +is not already defined, so that the debugging facilities are compiled. +@xref{Tracing, ,Tracing Your Parser}. +@item Accepted Values: Boolean + +@item Default Value: @code{false} +@end itemize +@end table +@c parse.trace @end deffn +@c %define @deffn {Directive} %defines Write a header file containing macro definitions for the token type @@ -7650,15 +7668,21 @@ Use the @samp{-t} option when you run Bison (@pxref{Invocation, @item the directive @samp{%debug} @findex %debug -Add the @code{%debug} directive (@pxref{Decl Summary, ,Bison -Declaration Summary}). This is a Bison extension, which will prove -useful when Bison will output parsers for languages that don't use a -preprocessor. Unless @acronym{POSIX} and Yacc portability matter to -you, this is -the preferred solution. +Add the @code{%debug} directive (@pxref{Decl Summary, ,Bison Declaration +Summary}). This Bison extension is maintained for backward +compatibility with previous versions of Bison. + +@item the variable @samp{parse.trace} +@findex %define parse.trace +Add the @samp{%define parse.trace} directive (@pxref{Decl Summary, +,Bison Declaration Summary}), or pass the @option{-Dparse.trace} option +(@pxref{Bison Options}). This is a Bison extension, which is especially +useful for languages that don't use a preprocessor. Unless +@acronym{POSIX} and Yacc portability matter to you, this is the +preferred solution. @end table -We suggest that you always enable the debug option so that debugging is +We suggest that you always enable the trace option so that debugging is always possible. The trace facility outputs messages with macro calls of the form @@ -8539,7 +8563,7 @@ error messages. @comment file: calc++-parser.yy @example -%debug +%define parse.trace %error-verbose @end example @@ -8847,11 +8871,13 @@ No header file can be generated for Java parsers. Do not use the @code{%defines} directive or the @option{-d}/@option{--defines} options. @c FIXME: Possible code change. -Currently, support for debugging is always compiled -in. Thus the @code{%debug} and @code{%token-table} directives and the +Currently, support for tracing is always compiled +in. Thus the @samp{%define parse.trace} and @samp{%token-table} +directives and the @option{-t}/@option{--debug} and @option{-k}/@option{--token-table} options have no effect. This may change in the future to eliminate -unused code in the generated parser, so use @code{%debug} explicitly +unused code in the generated parser, so use @samp{%define parse.trace} +explicitly if needed. Also, in the future the @code{%token-table} directive might enable a public interface to access the token names and codes. diff --git a/src/getargs.c b/src/getargs.c index c68503b1..fa179bf4 100644 --- a/src/getargs.c +++ b/src/getargs.c @@ -288,7 +288,8 @@ Parser:\n\ -L, --language=LANGUAGE specify the output programming language\n\ (this is an experimental feature)\n\ -S, --skeleton=FILE specify the skeleton to use\n\ - -t, --debug instrument the parser for debugging\n\ + -t, --debug instrument the parser for tracing\n\ + same as `-Dparse.trace'\n\ --locations enable location support\n\ -D, --define=NAME[=VALUE] same as `%define NAME \"VALUE\"'\n\ -p, --name-prefix=PREFIX prepend PREFIX to the external symbols\n\ @@ -616,7 +617,8 @@ getargs (int argc, char *argv[]) break; case 't': - muscle_percent_define_insert ("debug", command_line_location (), ""); + muscle_percent_define_insert ("parse.trace", + command_line_location (), ""); break; case 'v': diff --git a/src/scan-gram.l b/src/scan-gram.l index fd600bda..478d0967 100644 --- a/src/scan-gram.l +++ b/src/scan-gram.l @@ -175,7 +175,7 @@ splice (\\[ \f\t\v]*\n)* { "%binary" return PERCENT_NONASSOC; "%code" return PERCENT_CODE; - "%debug" RETURN_PERCENT_FLAG("debug"); + "%debug" RETURN_PERCENT_FLAG("parse.trace"); "%default"[-_]"prec" return PERCENT_DEFAULT_PREC; "%define" return PERCENT_DEFINE; "%defines" return PERCENT_DEFINES; -- 2.45.2