From 2062d72deb37782eb2c842e8dd1e606db5accbd1 Mon Sep 17 00:00:00 2001 From: Theophile Ranquet Date: Thu, 18 Oct 2012 18:00:51 +0000 Subject: [PATCH] deprecation: issue warnings in scanner * src/parse-gram.y: Move the handling of (three) deprecated constructs ... * src/scan-gram.l: ...Here, and issue warnings. (DEPRECATED): New. --- src/parse-gram.y | 4 ---- src/scan-gram.l | 49 +++++++++++++++++++++++++++++++++++++++---------- tests/calc.at | 2 +- tests/output.at | 4 ++-- 4 files changed, 42 insertions(+), 17 deletions(-) diff --git a/src/parse-gram.y b/src/parse-gram.y index f0187fb..1624dde 100644 --- a/src/parse-gram.y +++ b/src/parse-gram.y @@ -317,7 +317,6 @@ prologue_declaration: | "%expect" INT { expected_sr_conflicts = $2; } | "%expect-rr" INT { expected_rr_conflicts = $2; } | "%file-prefix" STRING { spec_file_prefix = $2; } -| "%file-prefix" "=" STRING { spec_file_prefix = $3; } /* deprecated */ | "%glr-parser" { nondeterministic_parser = true; @@ -334,11 +333,9 @@ prologue_declaration: } | "%language" STRING { language_argmatch ($2, grammar_prio, @1); } | "%name-prefix" STRING { spec_name_prefix = $2; } -| "%name-prefix" "=" STRING { spec_name_prefix = $3; } /* deprecated */ | "%no-lines" { no_lines_flag = true; } | "%nondeterministic-parser" { nondeterministic_parser = true; } | "%output" STRING { spec_outfile = $2; } -| "%output" "=" STRING { spec_outfile = $3; } /* deprecated */ | "%param" { current_param = $1; } params { current_param = param_none; } | "%require" STRING { version_check (&@2, $2); } | "%skeleton" STRING @@ -724,7 +721,6 @@ epilogue.opt: %% - /* Return the location of the left-hand side of a rule whose right-hand side is RHS[1] ... RHS[N]. Ignore empty nonterminals in the right-hand side, and return an empty location equal to the end diff --git a/src/scan-gram.l b/src/scan-gram.l index 8e48148..95edacc 100644 --- a/src/scan-gram.l +++ b/src/scan-gram.l @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -%option debug nodefault noinput nounput noyywrap never-interactive +%option debug nodefault noinput noyywrap never-interactive %option prefix="gram_" outfile="lex.yy.c" %{ @@ -31,6 +31,7 @@ #include #include +#include #include #include #include @@ -73,6 +74,17 @@ static size_t no_cr_read (FILE *, char *, size_t); yyless (0); \ } while (0) +#define DEPRECATED(Msg) \ + do { \ + size_t i; \ + complain (loc, Wdeprecated, \ + _("deprecated directive: %s, use %s"), \ + quote (yytext), quote_n (1, Msg)); \ + scanner_cursor.column -= mbsnwidth (Msg, strlen (Msg), 0); \ + for (i = strlen (Msg); i != 0; --i) \ + unput (Msg[i - 1]); \ + } while (0) + /* A string representing the most recently saved token. */ static char *last_string; @@ -134,6 +146,10 @@ tag [^\0<>]+ white space between the backslash and the newline. */ splice (\\[ \f\t\v]*\n)* +/* An equal sign, with optional leading whitespaces. This is used in some + deprecated constructs. */ +eqopt ([[:space:]]*=)? + %% %{ /* Nesting level. Either for nested braces, or nested angle brackets @@ -198,16 +214,16 @@ splice (\\[ \f\t\v]*\n)* "%binary" return PERCENT_NONASSOC; "%code" return PERCENT_CODE; "%debug" RETURN_PERCENT_FLAG("parse.trace"); - "%default"[-_]"prec" return PERCENT_DEFAULT_PREC; + "%default-prec" return PERCENT_DEFAULT_PREC; "%define" return PERCENT_DEFINE; "%defines" return PERCENT_DEFINES; "%destructor" return PERCENT_DESTRUCTOR; "%dprec" return PERCENT_DPREC; - "%error"[-_]"verbose" return PERCENT_ERROR_VERBOSE; + "%error-verbose" return PERCENT_ERROR_VERBOSE; "%expect" return PERCENT_EXPECT; - "%expect"[-_]"rr" return PERCENT_EXPECT_RR; + "%expect-rr" return PERCENT_EXPECT_RR; "%file-prefix" return PERCENT_FILE_PREFIX; - "%fixed"[-_]"output"[-_]"files" return PERCENT_YACC; + "%fixed-output-files" return PERCENT_YACC; "%initial-action" return PERCENT_INITIAL_ACTION; "%glr-parser" return PERCENT_GLR_PARSER; "%language" return PERCENT_LANGUAGE; @@ -215,9 +231,9 @@ splice (\\[ \f\t\v]*\n)* "%lex-param" RETURN_PERCENT_PARAM(lex); "%locations" RETURN_PERCENT_FLAG("locations"); "%merge" return PERCENT_MERGE; - "%name"[-_]"prefix" return PERCENT_NAME_PREFIX; - "%no"[-_]"default"[-_]"prec" return PERCENT_NO_DEFAULT_PREC; - "%no"[-_]"lines" return PERCENT_NO_LINES; + "%name-prefix" return PERCENT_NAME_PREFIX; + "%no-default-prec" return PERCENT_NO_DEFAULT_PREC; + "%no-lines" return PERCENT_NO_LINES; "%nonassoc" return PERCENT_NONASSOC; "%nondeterministic-parser" return PERCENT_NONDETERMINISTIC_PARSER; "%nterm" return PERCENT_NTERM; @@ -227,19 +243,32 @@ splice (\\[ \f\t\v]*\n)* "%prec" return PERCENT_PREC; "%precedence" return PERCENT_PRECEDENCE; "%printer" return PERCENT_PRINTER; - "%pure"[-_]"parser" RETURN_PERCENT_FLAG("api.pure"); + "%pure-parser" RETURN_PERCENT_FLAG("api.pure"); "%require" return PERCENT_REQUIRE; "%right" return PERCENT_RIGHT; "%skeleton" return PERCENT_SKELETON; "%start" return PERCENT_START; "%term" return PERCENT_TOKEN; "%token" return PERCENT_TOKEN; - "%token"[-_]"table" return PERCENT_TOKEN_TABLE; + "%token-table" return PERCENT_TOKEN_TABLE; "%type" return PERCENT_TYPE; "%union" return PERCENT_UNION; "%verbose" return PERCENT_VERBOSE; "%yacc" return PERCENT_YACC; + /* deprecated */ + "%default"[-_]"prec" DEPRECATED("%default-prec"); + "%error"[-_]"verbose" DEPRECATED("%define parse.error verbose"); + "%expect"[-_]"rr" DEPRECATED("%expect-rr"); + "%file-prefix"{eqopt} DEPRECATED("%file-prefix"); + "%fixed"[-_]"output"[-_]"files" DEPRECATED("%fixed-output-files"); + "%name"[-_]"prefix"{eqopt} DEPRECATED("%name-prefix"); + "%no"[-_]"default"[-_]"prec" DEPRECATED("%no-default-prec"); + "%no"[-_]"lines" DEPRECATED("%no-lines"); + "%output"{eqopt} DEPRECATED("%output"); + "%pure"[-_]"parser" DEPRECATED("%pure-parser"); + "%token"[-_]"table" DEPRECATED("%token-table"); + {directive} { complain (loc, complaint, _("invalid directive: %s"), quote (yytext)); } diff --git a/tests/calc.at b/tests/calc.at index a6c6742..bdc8028 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -637,7 +637,7 @@ AT_CHECK_CALC_LALR() AT_CHECK_CALC_LALR([%defines]) AT_CHECK_CALC_LALR([%locations]) -AT_CHECK_CALC_LALR([%name-prefix="calc"]) dnl test deprecated `=' +AT_CHECK_CALC_LALR([%name-prefix "calc"]) AT_CHECK_CALC_LALR([%verbose]) AT_CHECK_CALC_LALR([%yacc]) AT_CHECK_CALC_LALR([%define parse.error verbose]) diff --git a/tests/output.at b/tests/output.at index 3a13fd3..d3e3e6e 100644 --- a/tests/output.at +++ b/tests/output.at @@ -81,10 +81,10 @@ AT_CHECK_OUTPUT([foo.yy], [%defines %verbose %yacc],[], # Exercise %output and %file-prefix including deprecated '=' AT_CHECK_OUTPUT([foo.y], [%file-prefix "bar" %defines %verbose], [], [bar.output bar.tab.c bar.tab.h]) -AT_CHECK_OUTPUT([foo.y], [%output="bar.c" %defines %verbose %yacc],[], +AT_CHECK_OUTPUT([foo.y], [%output "bar.c" %defines %verbose %yacc],[], [bar.c bar.h bar.output]) AT_CHECK_OUTPUT([foo.y], - [%file-prefix="baz" %output "bar.c" %defines %verbose %yacc], + [%file-prefix "baz" %output "bar.c" %defines %verbose %yacc], [], [bar.c bar.h bar.output]) -- 2.7.4