mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-18 00:33:03 +00:00
muscle: check the kind of api.prefix, api.location.type
* data/bison.m4: Check api.prefix.
* data/c++.m4: Check api.location.type.
* doc/bison.texi: Fix uses of api.value.type, api.prefix, api.location.type.
Document {...} values for %define.
* src/parse-gram.y: Fix use of api.prefix.
* tests/calc.at: Fix uses of api.location.type.
* tests/input.at: Check api.prefix, and api.location.type.
This commit is contained in:
@@ -1027,6 +1027,7 @@ m4_define_default([b4_location_initial_line], [1])
|
|||||||
## --------------- ##
|
## --------------- ##
|
||||||
|
|
||||||
# api.prefix >< %name-prefix.
|
# api.prefix >< %name-prefix.
|
||||||
|
b4_percent_define_check_kind([api.prefix], [code], [deprecated])
|
||||||
b4_percent_define_ifdef([api.prefix],
|
b4_percent_define_ifdef([api.prefix],
|
||||||
[m4_ifdef([b4_prefix],
|
[m4_ifdef([b4_prefix],
|
||||||
[b4_complain_at(b4_percent_define_get_loc([api.prefix]),
|
[b4_complain_at(b4_percent_define_get_loc([api.prefix]),
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ m4_define([b4_comment],
|
|||||||
## Checks. ##
|
## Checks. ##
|
||||||
## -------- ##
|
## -------- ##
|
||||||
|
|
||||||
|
b4_percent_define_check_kind([api.location.type], [code], [deprecated])
|
||||||
b4_percent_define_check_kind([api.namespace], [code], [deprecated])
|
b4_percent_define_check_kind([api.namespace], [code], [deprecated])
|
||||||
|
|
||||||
## ---------------- ##
|
## ---------------- ##
|
||||||
|
|||||||
@@ -2160,7 +2160,7 @@ the same as the declarations for the infix notation calculator.
|
|||||||
%@}
|
%@}
|
||||||
|
|
||||||
/* Bison declarations. */
|
/* Bison declarations. */
|
||||||
%define api.value.type int
|
%define api.value.type @{int@}
|
||||||
%token NUM
|
%token NUM
|
||||||
|
|
||||||
%left '-' '+'
|
%left '-' '+'
|
||||||
@@ -3885,7 +3885,7 @@ and then your grammar can use the following instead of @code{%union}:
|
|||||||
%@{
|
%@{
|
||||||
#include "parser.h"
|
#include "parser.h"
|
||||||
%@}
|
%@}
|
||||||
%define api.value.type "union YYSTYPE"
|
%define api.value.type @{union YYSTYPE@}
|
||||||
%type <val> expr
|
%type <val> expr
|
||||||
%token <tptr> ID
|
%token <tptr> ID
|
||||||
@end group
|
@end group
|
||||||
@@ -5450,6 +5450,7 @@ parse.trace}.
|
|||||||
|
|
||||||
@deffn {Directive} %define @var{variable}
|
@deffn {Directive} %define @var{variable}
|
||||||
@deffnx {Directive} %define @var{variable} @var{value}
|
@deffnx {Directive} %define @var{variable} @var{value}
|
||||||
|
@deffnx {Directive} %define @var{variable} @{@var{value}@}
|
||||||
@deffnx {Directive} %define @var{variable} "@var{value}"
|
@deffnx {Directive} %define @var{variable} "@var{value}"
|
||||||
Define a variable to adjust Bison's behavior. @xref{%define Summary}.
|
Define a variable to adjust Bison's behavior. @xref{%define Summary}.
|
||||||
@end deffn
|
@end deffn
|
||||||
@@ -5499,7 +5500,7 @@ preprocessor guard: @samp{YY_@var{PREFIX}_@var{FILE}_INCLUDED}, where
|
|||||||
uppercase, with each series of non alphanumerical characters converted to a
|
uppercase, with each series of non alphanumerical characters converted to a
|
||||||
single underscore.
|
single underscore.
|
||||||
|
|
||||||
For instance with @samp{%define api.prefix "calc"} and @samp{%defines
|
For instance with @samp{%define api.prefix @{calc@}} and @samp{%defines
|
||||||
"lib/parse.h"}, the header will be guarded as follows.
|
"lib/parse.h"}, the header will be guarded as follows.
|
||||||
@example
|
@example
|
||||||
#ifndef YY_CALC_LIB_PARSE_H_INCLUDED
|
#ifndef YY_CALC_LIB_PARSE_H_INCLUDED
|
||||||
@@ -5661,17 +5662,17 @@ features are associated with variables, which are assigned by the
|
|||||||
|
|
||||||
@deffn {Directive} %define @var{variable}
|
@deffn {Directive} %define @var{variable}
|
||||||
@deffnx {Directive} %define @var{variable} @var{value}
|
@deffnx {Directive} %define @var{variable} @var{value}
|
||||||
|
@deffnx {Directive} %define @var{variable} @{@var{value}@}
|
||||||
@deffnx {Directive} %define @var{variable} "@var{value}"
|
@deffnx {Directive} %define @var{variable} "@var{value}"
|
||||||
Define @var{variable} to @var{value}.
|
Define @var{variable} to @var{value}.
|
||||||
|
|
||||||
@var{value} must be placed in quotation marks if it contains any
|
The type of the values depend on the syntax. Braces denote value in the
|
||||||
character other than a letter, underscore, period, or non-initial dash
|
target language (e.g., a namespace, a type, etc.). Keyword values (no
|
||||||
or digit. Omitting @code{"@var{value}"} entirely is always equivalent
|
delimiters) denote finite choice (e.g., a variation of a feature). String
|
||||||
to specifying @code{""}.
|
values denote remaining cases (e.g., a file name).
|
||||||
|
|
||||||
It is an error if a @var{variable} is defined by @code{%define}
|
It is an error if a @var{variable} is defined by @code{%define} multiple
|
||||||
multiple times, but see @ref{Bison Options,,-D
|
times, but see @ref{Bison Options,,-D @var{name}[=@var{value}]}.
|
||||||
@var{name}[=@var{value}]}.
|
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
The rest of this section summarizes variables and values that
|
The rest of this section summarizes variables and values that
|
||||||
@@ -5753,7 +5754,7 @@ The parser namespace is @code{foo} and @code{yylex} is referenced as
|
|||||||
@c api.namespace
|
@c api.namespace
|
||||||
|
|
||||||
@c ================================================== api.location.type
|
@c ================================================== api.location.type
|
||||||
@deffn {Directive} {%define api.location.type} @var{type}
|
@deffn {Directive} {%define api.location.type} @{@var{type}@}
|
||||||
|
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
@item Language(s): C++, Java
|
@item Language(s): C++, Java
|
||||||
@@ -5772,7 +5773,7 @@ Introduced in Bison 2.7 for C, C++ and Java. Introduced under the name
|
|||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@c ================================================== api.prefix
|
@c ================================================== api.prefix
|
||||||
@deffn {Directive} {%define api.prefix} @var{prefix}
|
@deffn {Directive} {%define api.prefix} @{@var{prefix}@}
|
||||||
|
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
@item Language(s): All
|
@item Language(s): All
|
||||||
@@ -5789,7 +5790,7 @@ Introduced in Bison 2.7 for C, C++ and Java. Introduced under the name
|
|||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@c ================================================== api.pure
|
@c ================================================== api.pure
|
||||||
@deffn Directive {%define api.pure}
|
@deffn Directive {%define api.pure} @var{purity}
|
||||||
|
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
@item Language(s): C
|
@item Language(s): C
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ static char const *char_name (char);
|
|||||||
#define YYTYPE_UINT8 uint_fast8_t
|
#define YYTYPE_UINT8 uint_fast8_t
|
||||||
}
|
}
|
||||||
|
|
||||||
%define api.prefix "gram_"
|
%define api.prefix {gram_}
|
||||||
%define api.pure full
|
%define api.pure full
|
||||||
%define locations
|
%define locations
|
||||||
%define parse.error verbose
|
%define parse.error verbose
|
||||||
|
|||||||
@@ -677,7 +677,7 @@ m4_define([AT_CHECK_CALC_LALR1_CC],
|
|||||||
|
|
||||||
AT_CHECK_CALC_LALR1_CC([])
|
AT_CHECK_CALC_LALR1_CC([])
|
||||||
AT_CHECK_CALC_LALR1_CC([%locations])
|
AT_CHECK_CALC_LALR1_CC([%locations])
|
||||||
AT_CHECK_CALC_LALR1_CC([%locations %define api.location.type Span])
|
AT_CHECK_CALC_LALR1_CC([%locations %define api.location.type {Span}])
|
||||||
AT_CHECK_CALC_LALR1_CC([%defines %locations %define parse.error verbose %name-prefix "calc" %verbose %yacc])
|
AT_CHECK_CALC_LALR1_CC([%defines %locations %define parse.error verbose %name-prefix "calc" %verbose %yacc])
|
||||||
|
|
||||||
AT_CHECK_CALC_LALR1_CC([%locations %define parse.error verbose %define api.prefix "calc" %verbose %yacc])
|
AT_CHECK_CALC_LALR1_CC([%locations %define parse.error verbose %define api.prefix "calc" %verbose %yacc])
|
||||||
@@ -711,7 +711,7 @@ m4_define([AT_CHECK_CALC_GLR_CC],
|
|||||||
|
|
||||||
AT_CHECK_CALC_GLR_CC([])
|
AT_CHECK_CALC_GLR_CC([])
|
||||||
AT_CHECK_CALC_GLR_CC([%locations])
|
AT_CHECK_CALC_GLR_CC([%locations])
|
||||||
AT_CHECK_CALC_GLR_CC([%locations %define api.location.type Span])
|
AT_CHECK_CALC_GLR_CC([%locations %define api.location.type {Span}])
|
||||||
AT_CHECK_CALC_GLR_CC([%defines %define parse.error verbose %name-prefix "calc" %verbose %yacc])
|
AT_CHECK_CALC_GLR_CC([%defines %define parse.error verbose %name-prefix "calc" %verbose %yacc])
|
||||||
AT_CHECK_CALC_GLR_CC([%define parse.error verbose %define api.prefix "calc" %verbose %yacc])
|
AT_CHECK_CALC_GLR_CC([%define parse.error verbose %define api.prefix "calc" %verbose %yacc])
|
||||||
|
|
||||||
|
|||||||
@@ -1442,17 +1442,21 @@ AT_SETUP([["%define" code variables]])
|
|||||||
|
|
||||||
m4_pushdef([AT_TEST],
|
m4_pushdef([AT_TEST],
|
||||||
[AT_DATA([input.yy],
|
[AT_DATA([input.yy],
|
||||||
[[%skeleton "lalr1.cc"
|
[[%skeleton "lalr1.cc" %locations
|
||||||
%define api.namespace ]$1[quux]$2[
|
%define api.location.type ]$1[quux]$2[
|
||||||
%define api.token.prefix ]$1[quux]$2[
|
%define api.namespace ]$1[quux]$2[
|
||||||
|
%define api.prefix ]$1[quux]$2[
|
||||||
|
%define api.token.prefix ]$1[quux]$2[
|
||||||
%token TOK // Otherwise api.token.prefix is unused.
|
%token TOK // Otherwise api.token.prefix is unused.
|
||||||
%%
|
%%
|
||||||
start: TOK;
|
start: TOK;
|
||||||
]])
|
]])
|
||||||
|
|
||||||
AT_BISON_CHECK([[input.yy]], [0], [],
|
AT_BISON_CHECK([[input.yy]], [0], [],
|
||||||
[[input.yy:3.9-24: warning: %define variable 'api.token.prefix' requires '{...}' values [-Wdeprecated]
|
[[input.yy:4.9-18: warning: %define variable 'api.prefix' requires '{...}' values [-Wdeprecated]
|
||||||
input.yy:2.9-21: warning: %define variable 'api.namespace' requires '{...}' values [-Wdeprecated]
|
input.yy:5.9-24: warning: %define variable 'api.token.prefix' requires '{...}' values [-Wdeprecated]
|
||||||
|
input.yy:2.9-25: warning: %define variable 'api.location.type' requires '{...}' values [-Wdeprecated]
|
||||||
|
input.yy:3.9-21: warning: %define variable 'api.namespace' requires '{...}' values [-Wdeprecated]
|
||||||
]])
|
]])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user