mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-20 01:33:03 +00:00
muscle: check more cases of %define variables with code values
* data/bison.m4 (b4_percent_define_check_kind): Fix overquotation. (api.location.type, api.position.type): Check they have code values here. * data/c++.m4 (api.location.type): No longer checked here. (parser_class_name): Check it here. * data/java.m4 (api.value.type, init_throws, lex_throws, parser_class_name) (throws, annotations, extends, implements): Check they have code values. * doc/bison.texi: Fix every incorrect occurrence of %define. Document the additional syntax for %define: code values. Document the additional syntax for -D/-F: string and code values. * tests/calc.at, tests/headers.at, tests/input.at, tests/java.at, * tests/local.at: Fix dependencies.
This commit is contained in:
@@ -853,7 +853,7 @@ b4_percent_define_if_define_([$1], [$2], $[1], $[2])])
|
|||||||
# ---------------------------------------------------------------------
|
# ---------------------------------------------------------------------
|
||||||
m4_define([b4_percent_define_check_kind],
|
m4_define([b4_percent_define_check_kind],
|
||||||
[b4_percent_define_ifdef_([$1],
|
[b4_percent_define_ifdef_([$1],
|
||||||
[m4_if(b4_percent_define_get_kind([[$1]]), [$2], [],
|
[m4_if(b4_percent_define_get_kind([$1]), [$2], [],
|
||||||
[b4_error([m4_default([$3], [complain])],
|
[b4_error([m4_default([$3], [complain])],
|
||||||
b4_percent_define_get_loc([$1]),
|
b4_percent_define_get_loc([$1]),
|
||||||
[m4_case([$2],
|
[m4_case([$2],
|
||||||
@@ -1026,6 +1026,12 @@ m4_define_default([b4_location_initial_line], [1])
|
|||||||
## Sanity checks. ##
|
## Sanity checks. ##
|
||||||
## --------------- ##
|
## --------------- ##
|
||||||
|
|
||||||
|
# api.location.prefix={...} (Java and C++).
|
||||||
|
b4_percent_define_check_kind([api.location.type], [code], [deprecated])
|
||||||
|
|
||||||
|
# api.position.prefix={...} (Java).
|
||||||
|
b4_percent_define_check_kind([api.position.type], [code], [deprecated])
|
||||||
|
|
||||||
# api.prefix >< %name-prefix.
|
# api.prefix >< %name-prefix.
|
||||||
b4_percent_define_check_kind([api.prefix], [code], [deprecated])
|
b4_percent_define_check_kind([api.prefix], [code], [deprecated])
|
||||||
b4_percent_define_ifdef([api.prefix],
|
b4_percent_define_ifdef([api.prefix],
|
||||||
|
|||||||
@@ -29,8 +29,8 @@ 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])
|
||||||
|
b4_percent_define_check_kind([parser_class_name], [code], [deprecated])
|
||||||
|
|
||||||
## ---------------- ##
|
## ---------------- ##
|
||||||
## Default values. ##
|
## Default values. ##
|
||||||
|
|||||||
16
data/java.m4
16
data/java.m4
@@ -169,6 +169,22 @@ m4_define([b4_predicate_case], [ case $1:
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
## -------- ##
|
||||||
|
## Checks. ##
|
||||||
|
## -------- ##
|
||||||
|
|
||||||
|
b4_percent_define_check_kind([[api.value.type]], [code], [deprecated])
|
||||||
|
|
||||||
|
b4_percent_define_check_kind([[annotations]], [code], [deprecated])
|
||||||
|
b4_percent_define_check_kind([[extends]], [code], [deprecated])
|
||||||
|
b4_percent_define_check_kind([[implements]], [code], [deprecated])
|
||||||
|
b4_percent_define_check_kind([[init_throws]], [code], [deprecated])
|
||||||
|
b4_percent_define_check_kind([[lex_throws]], [code], [deprecated])
|
||||||
|
b4_percent_define_check_kind([[parser_class_name]], [code], [deprecated])
|
||||||
|
b4_percent_define_check_kind([[throws]], [code], [deprecated])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## ---------------- ##
|
## ---------------- ##
|
||||||
## Default values. ##
|
## Default values. ##
|
||||||
## ---------------- ##
|
## ---------------- ##
|
||||||
|
|||||||
@@ -5930,7 +5930,8 @@ introduced in Bison 3.0
|
|||||||
|
|
||||||
|
|
||||||
@c ================================================== api.value.type
|
@c ================================================== api.value.type
|
||||||
@deffn Directive {%define api.value.type} @var{type}
|
@deffn Directive {%define api.value.type} @var{support}
|
||||||
|
@deffnx Directive {%define api.value.type} @{@var{type}@}
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
@item Language(s):
|
@item Language(s):
|
||||||
all
|
all
|
||||||
@@ -5940,16 +5941,16 @@ The type for semantic values.
|
|||||||
|
|
||||||
@item Accepted Values:
|
@item Accepted Values:
|
||||||
@table @asis
|
@table @asis
|
||||||
@item @code{""}
|
@item @samp{@{@}}
|
||||||
This grammar has no semantic value at all. This is not properly supported
|
This grammar has no semantic value at all. This is not properly supported
|
||||||
yet.
|
yet.
|
||||||
@item @code{%union} (C, C++)
|
@item @samp{union-directive} (C, C++)
|
||||||
The type is defined thanks to the @code{%union} directive. You don't have
|
The type is defined thanks to the @code{%union} directive. You don't have
|
||||||
to define @code{api.value.type} in that case, using @code{%union} suffices.
|
to define @code{api.value.type} in that case, using @code{%union} suffices.
|
||||||
@xref{Union Decl, ,The Union Declaration}.
|
@xref{Union Decl, ,The Union Declaration}.
|
||||||
For instance:
|
For instance:
|
||||||
@example
|
@example
|
||||||
%define api.value.type "%union"
|
%define api.value.type union-directive
|
||||||
%union
|
%union
|
||||||
@{
|
@{
|
||||||
int ival;
|
int ival;
|
||||||
@@ -5959,30 +5960,30 @@ For instance:
|
|||||||
%token <sval> STR "string"
|
%token <sval> STR "string"
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@item @code{union} (C, C++)
|
@item @samp{union} (C, C++)
|
||||||
The symbols are defined with type names, from which Bison will generate a
|
The symbols are defined with type names, from which Bison will generate a
|
||||||
@code{union}. For instance:
|
@code{union}. For instance:
|
||||||
@example
|
@example
|
||||||
%define api.value.type "union"
|
%define api.value.type union
|
||||||
%token <int> INT "integer"
|
%token <int> INT "integer"
|
||||||
%token <char *> STR "string"
|
%token <char *> STR "string"
|
||||||
@end example
|
@end example
|
||||||
This feature needs user feedback to stabilize. Note that most C++ objects
|
This feature needs user feedback to stabilize. Note that most C++ objects
|
||||||
cannot be stored in a @code{union}.
|
cannot be stored in a @code{union}.
|
||||||
|
|
||||||
@item @code{variant} (C++)
|
@item @samp{variant} (C++)
|
||||||
This is similar to @code{union}, but special storage techniques are used to
|
This is similar to @code{union}, but special storage techniques are used to
|
||||||
allow any kind of C++ object to be used. For instance:
|
allow any kind of C++ object to be used. For instance:
|
||||||
@example
|
@example
|
||||||
%define api.value.type "variant"
|
%define api.value.type variant
|
||||||
%token <int> INT "integer"
|
%token <int> INT "integer"
|
||||||
%token <std::string> STR "string"
|
%token <std::string> STR "string"
|
||||||
@end example
|
@end example
|
||||||
This feature needs user feedback to stabilize.
|
This feature needs user feedback to stabilize.
|
||||||
@xref{C++ Variants}.
|
@xref{C++ Variants}.
|
||||||
|
|
||||||
@item any other identifier
|
@item @samp{@{@var{type}@}}
|
||||||
Use this name as semantic value.
|
Use this @var{type} as semantic value.
|
||||||
@example
|
@example
|
||||||
%code requires
|
%code requires
|
||||||
@{
|
@{
|
||||||
@@ -5999,7 +6000,7 @@ Use this name as semantic value.
|
|||||||
@} u;
|
@} u;
|
||||||
@};
|
@};
|
||||||
@}
|
@}
|
||||||
%define api.value.type "struct my_value"
|
%define api.value.type @{struct my_value@}
|
||||||
%token <u.ival> INT "integer"
|
%token <u.ival> INT "integer"
|
||||||
%token <u.sval> STR "string"
|
%token <u.sval> STR "string"
|
||||||
@end example
|
@end example
|
||||||
@@ -6115,7 +6116,7 @@ destroyed properly. This option checks these constraints.
|
|||||||
|
|
||||||
|
|
||||||
@c ================================================== parse.error
|
@c ================================================== parse.error
|
||||||
@deffn Directive {%define parse.error}
|
@deffn Directive {%define parse.error} @var{verbosity}
|
||||||
@itemize
|
@itemize
|
||||||
@item Languages(s):
|
@item Languages(s):
|
||||||
all
|
all
|
||||||
@@ -6142,7 +6143,7 @@ However, this report can often be incorrect when LAC is not enabled
|
|||||||
|
|
||||||
|
|
||||||
@c ================================================== parse.lac
|
@c ================================================== parse.lac
|
||||||
@deffn Directive {%define parse.lac}
|
@deffn Directive {%define parse.lac} @var{when}
|
||||||
|
|
||||||
@itemize
|
@itemize
|
||||||
@item Languages(s): C (deterministic parsers only)
|
@item Languages(s): C (deterministic parsers only)
|
||||||
@@ -6165,7 +6166,7 @@ syntax error handling. @xref{LAC}.
|
|||||||
@xref{Tracing, ,Tracing Your Parser}.
|
@xref{Tracing, ,Tracing Your Parser}.
|
||||||
|
|
||||||
In C/C++, define the macro @code{YYDEBUG} (or @code{@var{prefix}DEBUG} with
|
In C/C++, define the macro @code{YYDEBUG} (or @code{@var{prefix}DEBUG} with
|
||||||
@samp{%define api.prefix @var{prefix}}), see @ref{Multiple Parsers,
|
@samp{%define api.prefix @{@var{prefix}@}}), see @ref{Multiple Parsers,
|
||||||
,Multiple Parsers in the Same Program}) to 1 in the parser implementation
|
,Multiple Parsers in the Same Program}) to 1 in the parser implementation
|
||||||
file if it is not already defined, so that the debugging facilities are
|
file if it is not already defined, so that the debugging facilities are
|
||||||
compiled.
|
compiled.
|
||||||
@@ -6308,7 +6309,7 @@ The easy way to do this is to define the @code{%define} variable
|
|||||||
@code{api.prefix}. With different @code{api.prefix}s it is guaranteed that
|
@code{api.prefix}. With different @code{api.prefix}s it is guaranteed that
|
||||||
headers do not conflict when included together, and that compiled objects
|
headers do not conflict when included together, and that compiled objects
|
||||||
can be linked together too. Specifying @samp{%define api.prefix
|
can be linked together too. Specifying @samp{%define api.prefix
|
||||||
@var{prefix}} (or passing the option @samp{-Dapi.prefix=@var{prefix}}, see
|
@{@var{prefix}@}} (or passing the option @samp{-Dapi.prefix=@{@var{prefix}@}}, see
|
||||||
@ref{Invocation, ,Invoking Bison}) renames the interface functions and
|
@ref{Invocation, ,Invoking Bison}) renames the interface functions and
|
||||||
variables of the Bison parser to start with @var{prefix} instead of
|
variables of the Bison parser to start with @var{prefix} instead of
|
||||||
@samp{yy}, and all the macros to start by @var{PREFIX} (i.e., @var{prefix}
|
@samp{yy}, and all the macros to start by @var{PREFIX} (i.e., @var{prefix}
|
||||||
@@ -6322,7 +6323,7 @@ The renamed symbols include @code{yyparse}, @code{yylex}, @code{yyerror},
|
|||||||
@code{YYSTYPE}, @code{YYLTYPE}, and @code{YYDEBUG}, which is treated
|
@code{YYSTYPE}, @code{YYLTYPE}, and @code{YYDEBUG}, which is treated
|
||||||
specifically --- more about this below.
|
specifically --- more about this below.
|
||||||
|
|
||||||
For example, if you use @samp{%define api.prefix c}, the names become
|
For example, if you use @samp{%define api.prefix @{c@}}, the names become
|
||||||
@code{cparse}, @code{clex}, @dots{}, @code{CSTYPE}, @code{CLTYPE}, and so
|
@code{cparse}, @code{clex}, @dots{}, @code{CSTYPE}, @code{CLTYPE}, and so
|
||||||
on.
|
on.
|
||||||
|
|
||||||
@@ -9555,7 +9556,7 @@ enabled if and only if @code{YYDEBUG} is nonzero.
|
|||||||
@item the option @option{-t} (POSIX Yacc compliant)
|
@item the option @option{-t} (POSIX Yacc compliant)
|
||||||
@itemx the option @option{--debug} (Bison extension)
|
@itemx the option @option{--debug} (Bison extension)
|
||||||
Use the @samp{-t} option when you run Bison (@pxref{Invocation, ,Invoking
|
Use the @samp{-t} option when you run Bison (@pxref{Invocation, ,Invoking
|
||||||
Bison}). With @samp{%define api.prefix c}, it defines @code{CDEBUG} to 1,
|
Bison}). With @samp{%define api.prefix @{c@}}, it defines @code{CDEBUG} to 1,
|
||||||
otherwise it defines @code{YYDEBUG} to 1.
|
otherwise it defines @code{YYDEBUG} to 1.
|
||||||
|
|
||||||
@item the directive @samp{%debug}
|
@item the directive @samp{%debug}
|
||||||
@@ -10681,7 +10682,7 @@ Instead of using the built-in types you may use the @code{%define} variable
|
|||||||
@code{api.location.type} to specify your own type:
|
@code{api.location.type} to specify your own type:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
%define api.location.type @var{LocationType}
|
%define api.location.type @{@var{LocationType}@}
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
The requirements over your @var{LocationType} are:
|
The requirements over your @var{LocationType} are:
|
||||||
@@ -10718,7 +10719,7 @@ parser @file{master/parser.yy} might use:
|
|||||||
@example
|
@example
|
||||||
%defines
|
%defines
|
||||||
%locations
|
%locations
|
||||||
%define namespace "master::"
|
%define api.namespace @{master::@}
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@noindent
|
@noindent
|
||||||
@@ -10726,7 +10727,7 @@ to generate the @file{master/position.hh} and @file{master/location.hh}
|
|||||||
files, reused by other parsers as follows:
|
files, reused by other parsers as follows:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
%define api.location.type "master::location"
|
%define api.location.type @{master::location@}
|
||||||
%code requires @{ #include <master/location.hh> @}
|
%code requires @{ #include <master/location.hh> @}
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@@ -10741,7 +10742,7 @@ files, reused by other parsers as follows:
|
|||||||
The output files @file{@var{output}.hh} and @file{@var{output}.cc}
|
The output files @file{@var{output}.hh} and @file{@var{output}.cc}
|
||||||
declare and define the parser class in the namespace @code{yy}. The
|
declare and define the parser class in the namespace @code{yy}. The
|
||||||
class name defaults to @code{parser}, but may be changed using
|
class name defaults to @code{parser}, but may be changed using
|
||||||
@samp{%define parser_class_name "@var{name}"}. The interface of
|
@samp{%define parser_class_name @{@var{name}@}}. The interface of
|
||||||
this class is detailed below. It can be extended using the
|
this class is detailed below. It can be extended using the
|
||||||
@code{%parse-param} feature: its semantics is slightly changed since
|
@code{%parse-param} feature: its semantics is slightly changed since
|
||||||
it describes an additional member of the parser class, and an
|
it describes an additional member of the parser class, and an
|
||||||
@@ -11146,7 +11147,7 @@ the grammar for.
|
|||||||
%skeleton "lalr1.cc" /* -*- C++ -*- */
|
%skeleton "lalr1.cc" /* -*- C++ -*- */
|
||||||
%require "@value{VERSION}"
|
%require "@value{VERSION}"
|
||||||
%defines
|
%defines
|
||||||
%define parser_class_name "calcxx_parser"
|
%define parser_class_name @{calcxx_parser@}
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@noindent
|
@noindent
|
||||||
@@ -11580,7 +11581,7 @@ superclass of all the semantic values using the @samp{%define api.value.type}
|
|||||||
directive. For example, after the following declaration:
|
directive. For example, after the following declaration:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
%define api.value.type "ASTNode"
|
%define api.value.type @{ASTNode@}
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@noindent
|
@noindent
|
||||||
@@ -11615,11 +11616,11 @@ class defines a @dfn{position}, a single point in a file; Bison itself
|
|||||||
defines a class representing a @dfn{location}, a range composed of a pair of
|
defines a class representing a @dfn{location}, a range composed of a pair of
|
||||||
positions (possibly spanning several files). The location class is an inner
|
positions (possibly spanning several files). The location class is an inner
|
||||||
class of the parser; the name is @code{Location} by default, and may also be
|
class of the parser; the name is @code{Location} by default, and may also be
|
||||||
renamed using @code{%define api.location.type "@var{class-name}"}.
|
renamed using @code{%define api.location.type @{@var{class-name}@}}.
|
||||||
|
|
||||||
The location class treats the position as a completely opaque value.
|
The location class treats the position as a completely opaque value.
|
||||||
By default, the class name is @code{Position}, but this can be changed
|
By default, the class name is @code{Position}, but this can be changed
|
||||||
with @code{%define api.position.type "@var{class-name}"}. This class must
|
with @code{%define api.position.type @{@var{class-name}@}}. This class must
|
||||||
be supplied by the user.
|
be supplied by the user.
|
||||||
|
|
||||||
|
|
||||||
@@ -11654,7 +11655,7 @@ properly, the position class should override the @code{equals} and
|
|||||||
The name of the generated parser class defaults to @code{YYParser}. The
|
The name of the generated parser class defaults to @code{YYParser}. The
|
||||||
@code{YY} prefix may be changed using the @code{%name-prefix} directive
|
@code{YY} prefix may be changed using the @code{%name-prefix} directive
|
||||||
or the @option{-p}/@option{--name-prefix} option. Alternatively, use
|
or the @option{-p}/@option{--name-prefix} option. Alternatively, use
|
||||||
@samp{%define parser_class_name "@var{name}"} to give a custom name to
|
@samp{%define parser_class_name @{@var{name}@}} to give a custom name to
|
||||||
the class. The interface of this class is detailed below.
|
the class. The interface of this class is detailed below.
|
||||||
|
|
||||||
By default, the parser class has package visibility. A declaration
|
By default, the parser class has package visibility. A declaration
|
||||||
@@ -11663,7 +11664,7 @@ according to the Java language specification, the name of the @file{.java}
|
|||||||
file should match the name of the class in this case. Similarly, you can
|
file should match the name of the class in this case. Similarly, you can
|
||||||
use @code{abstract}, @code{final} and @code{strictfp} with the
|
use @code{abstract}, @code{final} and @code{strictfp} with the
|
||||||
@code{%define} declaration to add other modifiers to the parser class.
|
@code{%define} declaration to add other modifiers to the parser class.
|
||||||
A single @samp{%define annotations "@var{annotations}"} directive can
|
A single @samp{%define annotations @{@var{annotations}@}} directive can
|
||||||
be used to add any number of annotations to the parser class.
|
be used to add any number of annotations to the parser class.
|
||||||
|
|
||||||
The Java package name of the parser class can be specified using the
|
The Java package name of the parser class can be specified using the
|
||||||
@@ -11781,7 +11782,7 @@ In both cases, the scanner has to implement the following methods.
|
|||||||
@deftypemethod {Lexer} {void} yyerror (Location @var{loc}, String @var{msg})
|
@deftypemethod {Lexer} {void} yyerror (Location @var{loc}, String @var{msg})
|
||||||
This method is defined by the user to emit an error message. The first
|
This method is defined by the user to emit an error message. The first
|
||||||
parameter is omitted if location tracking is not active. Its type can be
|
parameter is omitted if location tracking is not active. Its type can be
|
||||||
changed using @code{%define api.location.type "@var{class-name}".}
|
changed using @code{%define api.location.type @{@var{class-name}@}}.
|
||||||
@end deftypemethod
|
@end deftypemethod
|
||||||
|
|
||||||
@deftypemethod {Lexer} {int} yylex ()
|
@deftypemethod {Lexer} {int} yylex ()
|
||||||
@@ -11800,14 +11801,14 @@ Return respectively the first position of the last token that
|
|||||||
methods are not needed unless location tracking is active.
|
methods are not needed unless location tracking is active.
|
||||||
|
|
||||||
The return type can be changed using @code{%define api.position.type
|
The return type can be changed using @code{%define api.position.type
|
||||||
"@var{class-name}".}
|
@{@var{class-name}@}}.
|
||||||
@end deftypemethod
|
@end deftypemethod
|
||||||
|
|
||||||
@deftypemethod {Lexer} {Object} getLVal ()
|
@deftypemethod {Lexer} {Object} getLVal ()
|
||||||
Return the semantic value of the last token that yylex returned.
|
Return the semantic value of the last token that yylex returned.
|
||||||
|
|
||||||
The return type can be changed using @samp{%define api.value.type
|
The return type can be changed using @samp{%define api.value.type
|
||||||
"@var{class-name}".}
|
@{@var{class-name}@}}.
|
||||||
@end deftypemethod
|
@end deftypemethod
|
||||||
|
|
||||||
|
|
||||||
@@ -12028,12 +12029,12 @@ Whether the parser class is declared @code{abstract}. Default is false.
|
|||||||
@xref{Java Bison Interface}.
|
@xref{Java Bison Interface}.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deffn {Directive} {%define annotations} "@var{annotations}"
|
@deffn {Directive} {%define annotations} @{@var{annotations}@}
|
||||||
The Java annotations for the parser class. Default is none.
|
The Java annotations for the parser class. Default is none.
|
||||||
@xref{Java Bison Interface}.
|
@xref{Java Bison Interface}.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deffn {Directive} {%define extends} "@var{superclass}"
|
@deffn {Directive} {%define extends} @{@var{superclass}@}
|
||||||
The superclass of the parser class. Default is none.
|
The superclass of the parser class. Default is none.
|
||||||
@xref{Java Bison Interface}.
|
@xref{Java Bison Interface}.
|
||||||
@end deffn
|
@end deffn
|
||||||
@@ -12043,25 +12044,25 @@ Whether the parser class is declared @code{final}. Default is false.
|
|||||||
@xref{Java Bison Interface}.
|
@xref{Java Bison Interface}.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deffn {Directive} {%define implements} "@var{interfaces}"
|
@deffn {Directive} {%define implements} @{@var{interfaces}@}
|
||||||
The implemented interfaces of the parser class, a comma-separated list.
|
The implemented interfaces of the parser class, a comma-separated list.
|
||||||
Default is none.
|
Default is none.
|
||||||
@xref{Java Bison Interface}.
|
@xref{Java Bison Interface}.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deffn {Directive} {%define init_throws} "@var{exceptions}"
|
@deffn {Directive} {%define init_throws} @{@var{exceptions}@}
|
||||||
The exceptions thrown by @code{%code init} from the parser class
|
The exceptions thrown by @code{%code init} from the parser class
|
||||||
constructor. Default is none.
|
constructor. Default is none.
|
||||||
@xref{Java Parser Interface}.
|
@xref{Java Parser Interface}.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deffn {Directive} {%define lex_throws} "@var{exceptions}"
|
@deffn {Directive} {%define lex_throws} @{@var{exceptions}@}
|
||||||
The exceptions thrown by the @code{yylex} method of the lexer, a
|
The exceptions thrown by the @code{yylex} method of the lexer, a
|
||||||
comma-separated list. Default is @code{java.io.IOException}.
|
comma-separated list. Default is @code{java.io.IOException}.
|
||||||
@xref{Java Scanner Interface}.
|
@xref{Java Scanner Interface}.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deffn {Directive} {%define api.location.type} "@var{class}"
|
@deffn {Directive} {%define api.location.type} @{@var{class}@}
|
||||||
The name of the class used for locations (a range between two
|
The name of the class used for locations (a range between two
|
||||||
positions). This class is generated as an inner class of the parser
|
positions). This class is generated as an inner class of the parser
|
||||||
class by @command{bison}. Default is @code{Location}.
|
class by @command{bison}. Default is @code{Location}.
|
||||||
@@ -12069,18 +12070,18 @@ Formerly named @code{location_type}.
|
|||||||
@xref{Java Location Values}.
|
@xref{Java Location Values}.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deffn {Directive} {%define package} "@var{package}"
|
@deffn {Directive} {%define package} @{@var{package}@}
|
||||||
The package to put the parser class in. Default is none.
|
The package to put the parser class in. Default is none.
|
||||||
@xref{Java Bison Interface}.
|
@xref{Java Bison Interface}.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deffn {Directive} {%define parser_class_name} "@var{name}"
|
@deffn {Directive} {%define parser_class_name} @{@var{name}@}
|
||||||
The name of the parser class. Default is @code{YYParser} or
|
The name of the parser class. Default is @code{YYParser} or
|
||||||
@code{@var{name-prefix}Parser}.
|
@code{@var{name-prefix}Parser}.
|
||||||
@xref{Java Bison Interface}.
|
@xref{Java Bison Interface}.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deffn {Directive} {%define api.position.type} "@var{class}"
|
@deffn {Directive} {%define api.position.type} @{@var{class}@}
|
||||||
The name of the class used for positions. This class must be supplied by
|
The name of the class used for positions. This class must be supplied by
|
||||||
the user. Default is @code{Position}.
|
the user. Default is @code{Position}.
|
||||||
Formerly named @code{position_type}.
|
Formerly named @code{position_type}.
|
||||||
@@ -12092,7 +12093,7 @@ Whether the parser class is declared @code{public}. Default is false.
|
|||||||
@xref{Java Bison Interface}.
|
@xref{Java Bison Interface}.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deffn {Directive} {%define api.value.type} "@var{class}"
|
@deffn {Directive} {%define api.value.type} @{@var{class}@}
|
||||||
The base type of semantic values. Default is @code{Object}.
|
The base type of semantic values. Default is @code{Object}.
|
||||||
@xref{Java Semantic Values}.
|
@xref{Java Semantic Values}.
|
||||||
@end deffn
|
@end deffn
|
||||||
@@ -12102,7 +12103,7 @@ Whether the parser class is declared @code{strictfp}. Default is false.
|
|||||||
@xref{Java Bison Interface}.
|
@xref{Java Bison Interface}.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deffn {Directive} {%define throws} "@var{exceptions}"
|
@deffn {Directive} {%define throws} @{@var{exceptions}@}
|
||||||
The exceptions thrown by user-supplied parser actions and
|
The exceptions thrown by user-supplied parser actions and
|
||||||
@code{%initial-action}, a comma-separated list. Default is none.
|
@code{%initial-action}, a comma-separated list. Default is none.
|
||||||
@xref{Java Parser Interface}.
|
@xref{Java Parser Interface}.
|
||||||
@@ -12656,6 +12657,7 @@ Precedence}.
|
|||||||
|
|
||||||
@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
|
||||||
|
|||||||
@@ -607,17 +607,17 @@ AT_CHECK_CALC_LALR([%define api.pure full %locations])
|
|||||||
AT_CHECK_CALC_LALR([%define api.push-pull both %define api.pure full %locations])
|
AT_CHECK_CALC_LALR([%define api.push-pull both %define api.pure full %locations])
|
||||||
AT_CHECK_CALC_LALR([%define parse.error verbose %locations])
|
AT_CHECK_CALC_LALR([%define parse.error verbose %locations])
|
||||||
|
|
||||||
AT_CHECK_CALC_LALR([%define parse.error verbose %locations %defines %define api.prefix "calc" %verbose %yacc])
|
AT_CHECK_CALC_LALR([%define parse.error verbose %locations %defines %define api.prefix {calc} %verbose %yacc])
|
||||||
AT_CHECK_CALC_LALR([%define parse.error verbose %locations %defines %name-prefix "calc" %define api.token.prefix {TOK_} %verbose %yacc])
|
AT_CHECK_CALC_LALR([%define parse.error verbose %locations %defines %name-prefix "calc" %define api.token.prefix {TOK_} %verbose %yacc])
|
||||||
|
|
||||||
AT_CHECK_CALC_LALR([%debug])
|
AT_CHECK_CALC_LALR([%debug])
|
||||||
AT_CHECK_CALC_LALR([%define parse.error verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
|
AT_CHECK_CALC_LALR([%define parse.error verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
|
||||||
AT_CHECK_CALC_LALR([%define parse.error verbose %debug %locations %defines %define api.prefix "calc" %verbose %yacc])
|
AT_CHECK_CALC_LALR([%define parse.error verbose %debug %locations %defines %define api.prefix {calc} %verbose %yacc])
|
||||||
|
|
||||||
AT_CHECK_CALC_LALR([%define api.pure full %define parse.error verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
|
AT_CHECK_CALC_LALR([%define api.pure full %define parse.error verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
|
||||||
AT_CHECK_CALC_LALR([%define api.push-pull both %define api.pure full %define parse.error verbose %debug %locations %defines %define api.prefix "calc" %verbose %yacc])
|
AT_CHECK_CALC_LALR([%define api.push-pull both %define api.pure full %define parse.error verbose %debug %locations %defines %define api.prefix {calc} %verbose %yacc])
|
||||||
|
|
||||||
AT_CHECK_CALC_LALR([%define api.pure %define parse.error verbose %debug %locations %defines %define api.prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
AT_CHECK_CALC_LALR([%define api.pure %define parse.error verbose %debug %locations %defines %define api.prefix {calc} %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
||||||
|
|
||||||
|
|
||||||
# ----------------------- #
|
# ----------------------- #
|
||||||
@@ -639,7 +639,7 @@ AT_CHECK_CALC_GLR()
|
|||||||
AT_CHECK_CALC_GLR([%defines])
|
AT_CHECK_CALC_GLR([%defines])
|
||||||
AT_CHECK_CALC_GLR([%locations])
|
AT_CHECK_CALC_GLR([%locations])
|
||||||
AT_CHECK_CALC_GLR([%name-prefix "calc"])
|
AT_CHECK_CALC_GLR([%name-prefix "calc"])
|
||||||
AT_CHECK_CALC_GLR([%define api.prefix "calc"])
|
AT_CHECK_CALC_GLR([%define api.prefix {calc}])
|
||||||
AT_CHECK_CALC_GLR([%verbose])
|
AT_CHECK_CALC_GLR([%verbose])
|
||||||
AT_CHECK_CALC_GLR([%yacc])
|
AT_CHECK_CALC_GLR([%yacc])
|
||||||
AT_CHECK_CALC_GLR([%define parse.error verbose])
|
AT_CHECK_CALC_GLR([%define parse.error verbose])
|
||||||
@@ -651,12 +651,12 @@ AT_CHECK_CALC_GLR([%define parse.error verbose %locations %defines %name-prefix
|
|||||||
|
|
||||||
AT_CHECK_CALC_GLR([%debug])
|
AT_CHECK_CALC_GLR([%debug])
|
||||||
AT_CHECK_CALC_GLR([%define parse.error verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
|
AT_CHECK_CALC_GLR([%define parse.error verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
|
||||||
AT_CHECK_CALC_GLR([%define parse.error verbose %debug %locations %defines %define api.prefix "calc" %define api.token.prefix {TOK_} %verbose %yacc])
|
AT_CHECK_CALC_GLR([%define parse.error verbose %debug %locations %defines %define api.prefix {calc} %define api.token.prefix {TOK_} %verbose %yacc])
|
||||||
|
|
||||||
AT_CHECK_CALC_GLR([%define api.pure %define parse.error verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
|
AT_CHECK_CALC_GLR([%define api.pure %define parse.error verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
|
||||||
|
|
||||||
AT_CHECK_CALC_GLR([%define api.pure %define parse.error verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
AT_CHECK_CALC_GLR([%define api.pure %define parse.error verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
||||||
AT_CHECK_CALC_GLR([%define api.pure %define parse.error verbose %debug %locations %defines %define api.prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
AT_CHECK_CALC_GLR([%define api.pure %define parse.error verbose %debug %locations %defines %define api.prefix {calc} %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------- #
|
# ----------------------------- #
|
||||||
@@ -680,16 +680,16 @@ 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])
|
||||||
AT_CHECK_CALC_LALR1_CC([%locations %define parse.error verbose %debug %name-prefix "calc" %verbose %yacc])
|
AT_CHECK_CALC_LALR1_CC([%locations %define parse.error verbose %debug %name-prefix "calc" %verbose %yacc])
|
||||||
|
|
||||||
AT_CHECK_CALC_LALR1_CC([%locations %define parse.error verbose %debug %define api.prefix "calc" %verbose %yacc])
|
AT_CHECK_CALC_LALR1_CC([%locations %define parse.error verbose %debug %define api.prefix {calc} %verbose %yacc])
|
||||||
AT_CHECK_CALC_LALR1_CC([%locations %define parse.error verbose %debug %define api.prefix "calc" %define api.token.prefix {TOK_} %verbose %yacc])
|
AT_CHECK_CALC_LALR1_CC([%locations %define parse.error verbose %debug %define api.prefix {calc} %define api.token.prefix {TOK_} %verbose %yacc])
|
||||||
|
|
||||||
AT_CHECK_CALC_LALR1_CC([%defines %locations %define parse.error verbose %debug %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
AT_CHECK_CALC_LALR1_CC([%defines %locations %define parse.error verbose %debug %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
||||||
|
|
||||||
AT_CHECK_CALC_LALR1_CC([%define parse.error verbose %debug %define api.prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
AT_CHECK_CALC_LALR1_CC([%define parse.error verbose %debug %define api.prefix {calc} %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
||||||
AT_CHECK_CALC_LALR1_CC([%defines %locations %define parse.error verbose %debug %define api.prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
AT_CHECK_CALC_LALR1_CC([%defines %locations %define parse.error verbose %debug %define api.prefix {calc} %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -713,7 +713,7 @@ 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])
|
||||||
|
|
||||||
AT_CHECK_CALC_GLR_CC([%debug])
|
AT_CHECK_CALC_GLR_CC([%debug])
|
||||||
|
|
||||||
@@ -721,4 +721,4 @@ AT_CHECK_CALC_GLR_CC([%define parse.error verbose %debug %name-prefix "calc" %ve
|
|||||||
AT_CHECK_CALC_GLR_CC([%define parse.error verbose %debug %name-prefix "calc" %define api.token.prefix {TOK_} %verbose %yacc])
|
AT_CHECK_CALC_GLR_CC([%define parse.error verbose %debug %name-prefix "calc" %define api.token.prefix {TOK_} %verbose %yacc])
|
||||||
|
|
||||||
AT_CHECK_CALC_GLR_CC([%locations %defines %define parse.error verbose %debug %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
AT_CHECK_CALC_GLR_CC([%locations %defines %define parse.error verbose %debug %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
||||||
AT_CHECK_CALC_GLR_CC([%locations %defines %define parse.error verbose %debug %define api.prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
AT_CHECK_CALC_GLR_CC([%locations %defines %define parse.error verbose %debug %define api.prefix {calc} %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
||||||
|
|||||||
@@ -117,9 +117,9 @@ AT_SETUP([Several parsers])
|
|||||||
# nor yy* identifiers in the header. Check that headers are
|
# nor yy* identifiers in the header. Check that headers are
|
||||||
# self-contained, and can be compiled by a C++ compiler.
|
# self-contained, and can be compiled by a C++ compiler.
|
||||||
m4_pushdef([AT_TEST],
|
m4_pushdef([AT_TEST],
|
||||||
[AT_BISON_OPTION_PUSHDEFS([%define api.prefix "$1_" $2])
|
[AT_BISON_OPTION_PUSHDEFS([%define api.prefix {$1_} $2])
|
||||||
AT_DATA_GRAMMAR([$1.y],
|
AT_DATA_GRAMMAR([$1.y],
|
||||||
[[%define api.prefix "$1_"
|
[[%define api.prefix {$1_}
|
||||||
$2
|
$2
|
||||||
%error-verbose
|
%error-verbose
|
||||||
%union
|
%union
|
||||||
|
|||||||
@@ -1422,8 +1422,8 @@ AT_SETUP([["%define" Boolean variables]])
|
|||||||
|
|
||||||
AT_DATA([Input.y],
|
AT_DATA([Input.y],
|
||||||
[[%language "Java"
|
[[%language "Java"
|
||||||
%define public "maybe"
|
%define public maybe
|
||||||
%define parser_class_name "Input"
|
%define parser_class_name {Input}
|
||||||
%%
|
%%
|
||||||
start: %empty;
|
start: %empty;
|
||||||
]])
|
]])
|
||||||
@@ -1453,9 +1453,9 @@ start: TOK;
|
|||||||
]])
|
]])
|
||||||
|
|
||||||
AT_BISON_CHECK([[input.yy]], [0], [],
|
AT_BISON_CHECK([[input.yy]], [0], [],
|
||||||
[[input.yy:4.9-18: warning: %define variable 'api.prefix' requires '{...}' values [-Wdeprecated]
|
[[input.yy:2.9-25: warning: %define variable 'api.location.type' requires '{...}' values [-Wdeprecated]
|
||||||
|
input.yy:4.9-18: warning: %define variable 'api.prefix' requires '{...}' values [-Wdeprecated]
|
||||||
input.yy:5.9-24: warning: %define variable 'api.token.prefix' 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]
|
input.yy:3.9-21: warning: %define variable 'api.namespace' requires '{...}' values [-Wdeprecated]
|
||||||
]])
|
]])
|
||||||
])
|
])
|
||||||
@@ -1857,10 +1857,10 @@ AT_BISON_CHECK([[$2 input.y]], [[1]], [[]],
|
|||||||
]])
|
]])
|
||||||
])
|
])
|
||||||
|
|
||||||
AT_TEST([%define api.prefix foo %name-prefix "bar"], [], [input.y:1.9-18])
|
AT_TEST([%define api.prefix {foo} %name-prefix "bar"], [], [input.y:1.9-18])
|
||||||
AT_TEST([], [-Dapi.prefix=foo -p bar], [<command line>:2])
|
AT_TEST([], [-Dapi.prefix={foo} -p bar], [<command line>:2])
|
||||||
AT_TEST([%name-prefix "bar"], [-Dapi.prefix=foo], [<command line>:2])
|
AT_TEST([%name-prefix "bar"], [-Dapi.prefix={foo}], [<command line>:2])
|
||||||
AT_TEST([%define api.prefix foo], [-p bar], [input.y:1.9-18])
|
AT_TEST([%define api.prefix {foo}], [-p bar], [input.y:1.9-18])
|
||||||
|
|
||||||
m4_popdef([AT_TEST])
|
m4_popdef([AT_TEST])
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ AT_DATA([Calc.y],
|
|||||||
[[/* Infix notation calculator--calc */
|
[[/* Infix notation calculator--calc */
|
||||||
%language "Java"
|
%language "Java"
|
||||||
%name-prefix "Calc"
|
%name-prefix "Calc"
|
||||||
%define parser_class_name "Calc"
|
%define parser_class_name {Calc}
|
||||||
%define public
|
%define public
|
||||||
|
|
||||||
]$4[
|
]$4[
|
||||||
@@ -464,10 +464,10 @@ AT_CHECK_JAVA_GREP([[class PrefixParser]])
|
|||||||
AT_CHECK_JAVA_MINIMAL([[%define api.token.prefix {TOK_}]])
|
AT_CHECK_JAVA_MINIMAL([[%define api.token.prefix {TOK_}]])
|
||||||
AT_CHECK_JAVA_GREP([[.*TOK_END.*]])
|
AT_CHECK_JAVA_GREP([[.*TOK_END.*]])
|
||||||
|
|
||||||
AT_CHECK_JAVA_MINIMAL([[%define parser_class_name "ParserClassName"]])
|
AT_CHECK_JAVA_MINIMAL([[%define parser_class_name {ParserClassName}]])
|
||||||
AT_CHECK_JAVA_GREP([[class ParserClassName]])
|
AT_CHECK_JAVA_GREP([[class ParserClassName]])
|
||||||
|
|
||||||
AT_CHECK_JAVA_MINIMAL([[%define package "user_java_package"]])
|
AT_CHECK_JAVA_MINIMAL([[%define package {user_java_package}]])
|
||||||
AT_CHECK_JAVA_GREP([[package user_java_package;]])
|
AT_CHECK_JAVA_GREP([[package user_java_package;]])
|
||||||
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
@@ -530,7 +530,7 @@ AT_CHECK_JAVA_GREP([[public final strictfp class YYParser]])
|
|||||||
|
|
||||||
# FIXME: Can't do a Java compile because javacomp.sh is configured for 1.3
|
# FIXME: Can't do a Java compile because javacomp.sh is configured for 1.3
|
||||||
AT_CHECK_JAVA_MINIMAL([[
|
AT_CHECK_JAVA_MINIMAL([[
|
||||||
%define annotations "/*@Deprecated @SupressWarnings(\"unchecked\") @SupressWarnings({\"unchecked\", \"deprecation\"}) @SupressWarnings(value={\"unchecked\", \"deprecation\"})*/"
|
%define annotations {/*@Deprecated @SupressWarnings("unchecked") @SupressWarnings({"unchecked", "deprecation"}) @SupressWarnings(value={"unchecked", "deprecation"})*/}
|
||||||
%define public]])
|
%define public]])
|
||||||
AT_CHECK_JAVA_GREP([[/\*@Deprecated @SupressWarnings("unchecked") @SupressWarnings({"unchecked", "deprecation"}) @SupressWarnings(value={"unchecked", "deprecation"})\*/ public class YYParser]])
|
AT_CHECK_JAVA_GREP([[/\*@Deprecated @SupressWarnings("unchecked") @SupressWarnings({"unchecked", "deprecation"}) @SupressWarnings(value={"unchecked", "deprecation"})\*/ public class YYParser]])
|
||||||
|
|
||||||
@@ -543,15 +543,15 @@ AT_CLEANUP
|
|||||||
|
|
||||||
AT_SETUP([Java parser class extends and implements])
|
AT_SETUP([Java parser class extends and implements])
|
||||||
|
|
||||||
AT_CHECK_JAVA_MINIMAL([[%define extends "Thread"]])
|
AT_CHECK_JAVA_MINIMAL([[%define extends {Thread}]])
|
||||||
AT_CHECK_JAVA_GREP([[class YYParser extends Thread]])
|
AT_CHECK_JAVA_GREP([[class YYParser extends Thread]])
|
||||||
|
|
||||||
AT_CHECK_JAVA_MINIMAL([[%define implements "Cloneable"]])
|
AT_CHECK_JAVA_MINIMAL([[%define implements {Cloneable}]])
|
||||||
AT_CHECK_JAVA_GREP([[class YYParser implements Cloneable]])
|
AT_CHECK_JAVA_GREP([[class YYParser implements Cloneable]])
|
||||||
|
|
||||||
AT_CHECK_JAVA_MINIMAL([[
|
AT_CHECK_JAVA_MINIMAL([[
|
||||||
%define extends "Thread"
|
%define extends {Thread}
|
||||||
%define implements "Cloneable"]])
|
%define implements {Cloneable}]])
|
||||||
AT_CHECK_JAVA_GREP([[class YYParser extends Thread implements Cloneable]])
|
AT_CHECK_JAVA_GREP([[class YYParser extends Thread implements Cloneable]])
|
||||||
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
@@ -643,9 +643,9 @@ AT_SETUP([Java throws specifications])
|
|||||||
|
|
||||||
m4_define([AT_JT_lex_throws_define], [m4_case(AT_JT_lex_throws,
|
m4_define([AT_JT_lex_throws_define], [m4_case(AT_JT_lex_throws,
|
||||||
-1, [],
|
-1, [],
|
||||||
0, [[%define lex_throws ""]],
|
0, [[%define lex_throws {}]],
|
||||||
1, [[%define lex_throws "InterruptedException"]],
|
1, [[%define lex_throws {InterruptedException}]],
|
||||||
2, [[%define lex_throws "InterruptedException, IllegalAccessException"]])])
|
2, [[%define lex_throws {InterruptedException, IllegalAccessException}]])])
|
||||||
|
|
||||||
m4_define([AT_JT_yylex_throws], [m4_case(AT_JT_lex_throws,
|
m4_define([AT_JT_yylex_throws], [m4_case(AT_JT_lex_throws,
|
||||||
-1, [[ throws java.io.IOException]],
|
-1, [[ throws java.io.IOException]],
|
||||||
@@ -662,9 +662,9 @@ m4_define([AT_JT_yylex_action], [m4_case(AT_JT_lex_throws,
|
|||||||
|
|
||||||
m4_define([AT_JT_throws_define], [m4_case(AT_JT_throws,
|
m4_define([AT_JT_throws_define], [m4_case(AT_JT_throws,
|
||||||
-1, [],
|
-1, [],
|
||||||
0, [[%define throws ""]],
|
0, [[%define throws {}]],
|
||||||
1, [[%define throws "ClassNotFoundException"]],
|
1, [[%define throws {ClassNotFoundException}]],
|
||||||
2, [[%define throws "ClassNotFoundException, InstantiationException"]])])
|
2, [[%define throws {ClassNotFoundException, InstantiationException}]])])
|
||||||
|
|
||||||
m4_define([AT_JT_yyaction_throws], [m4_case(AT_JT_throws,
|
m4_define([AT_JT_yyaction_throws], [m4_case(AT_JT_throws,
|
||||||
-1, [],
|
-1, [],
|
||||||
@@ -727,16 +727,16 @@ AT_CLEANUP
|
|||||||
AT_SETUP([Java constructor init and init_throws])
|
AT_SETUP([Java constructor init and init_throws])
|
||||||
|
|
||||||
AT_CHECK_JAVA_MINIMAL([[
|
AT_CHECK_JAVA_MINIMAL([[
|
||||||
%define extends "Thread"
|
%define extends {Thread}
|
||||||
%code init { super("Test Thread"); if (true) throw new InterruptedException(); }
|
%code init { super("Test Thread"); if (true) throw new InterruptedException(); }
|
||||||
%define init_throws "InterruptedException"
|
%define init_throws {InterruptedException}
|
||||||
%lex-param {int lex_param}]])
|
%lex-param {int lex_param}]])
|
||||||
AT_CHECK([[grep -q 'super("Test Thread"); if (true) throw new InterruptedException();' YYParser.java]])
|
AT_CHECK([[grep -q 'super("Test Thread"); if (true) throw new InterruptedException();' YYParser.java]])
|
||||||
|
|
||||||
AT_CHECK_JAVA_MINIMAL_W_LEXER([[
|
AT_CHECK_JAVA_MINIMAL_W_LEXER([[
|
||||||
%define extends "Thread"
|
%define extends {Thread}
|
||||||
%code init { super("Test Thread"); if (true) throw new InterruptedException(); }
|
%code init { super("Test Thread"); if (true) throw new InterruptedException(); }
|
||||||
%define init_throws "InterruptedException"]], [], [[return EOF;]])
|
%define init_throws {InterruptedException}]], [], [[return EOF;]])
|
||||||
AT_CHECK([[grep -q 'super("Test Thread"); if (true) throw new InterruptedException();' YYParser.java]])
|
AT_CHECK([[grep -q 'super("Test Thread"); if (true) throw new InterruptedException();' YYParser.java]])
|
||||||
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
@@ -749,20 +749,20 @@ AT_CLEANUP
|
|||||||
AT_SETUP([Java value, position, and location types])
|
AT_SETUP([Java value, position, and location types])
|
||||||
|
|
||||||
AT_CHECK_JAVA_MINIMAL([[
|
AT_CHECK_JAVA_MINIMAL([[
|
||||||
%define api.value.type "java.awt.Color"
|
%define api.value.type {java.awt.Color}
|
||||||
%type<java.awt.Color> start;
|
%type<java.awt.Color> start;
|
||||||
%define api.location.type "MyLoc"
|
%define api.location.type {MyLoc}
|
||||||
%define api.position.type "MyPos"
|
%define api.position.type {MyPos}
|
||||||
%code { class MyPos {} }]], [[$$ = $<java.awt.Color>1;]], [[MyPos]])
|
%code { class MyPos {} }]], [[$$ = $<java.awt.Color>1;]], [[MyPos]])
|
||||||
AT_CHECK([[grep 'java.awt.Color' YYParser.java]], [0], [ignore])
|
AT_CHECK([[grep 'java.awt.Color' YYParser.java]], [0], [ignore])
|
||||||
AT_CHECK([[$EGREP -v ' */?\*' YYParser.java | grep 'Position']], [1], [ignore])
|
AT_CHECK([[$EGREP -v ' */?\*' YYParser.java | grep 'Position']], [1], [ignore])
|
||||||
AT_CHECK([[$EGREP -v ' */?\*' YYParser.java | grep 'Location']], [1], [ignore])
|
AT_CHECK([[$EGREP -v ' */?\*' YYParser.java | grep 'Location']], [1], [ignore])
|
||||||
|
|
||||||
AT_CHECK_JAVA_MINIMAL_W_LEXER([[
|
AT_CHECK_JAVA_MINIMAL_W_LEXER([[
|
||||||
%define api.value.type "java.awt.Color"
|
%define api.value.type {java.awt.Color}
|
||||||
%type<java.awt.Color> start;
|
%type<java.awt.Color> start;
|
||||||
%define api.location.type "MyLoc"
|
%define api.location.type {MyLoc}
|
||||||
%define api.position.type "MyPos"
|
%define api.position.type {MyPos}
|
||||||
%code { class MyPos {} }]], [], [[return EOF;]], [],
|
%code { class MyPos {} }]], [], [[return EOF;]], [],
|
||||||
[[$$ = $<java.awt.Color>1;]],
|
[[$$ = $<java.awt.Color>1;]],
|
||||||
[[java.awt.Color]], [[MyPos]], [[MyLoc]])
|
[[java.awt.Color]], [[MyPos]], [[MyLoc]])
|
||||||
|
|||||||
@@ -178,13 +178,13 @@ m4_bpatsubst([$3], [%parse-param { *\([^{}]*[^{} ]\) *}],
|
|||||||
|
|
||||||
m4_pushdef([AT_PURE_IF],
|
m4_pushdef([AT_PURE_IF],
|
||||||
[m4_bmatch([$3], [%define *api\.pure\|%pure-parser],
|
[m4_bmatch([$3], [%define *api\.pure\|%pure-parser],
|
||||||
[m4_bmatch([$3], [%define *api\.pure *"?false"?], [$2], [$1])],
|
[m4_bmatch([$3], [%define *api\.pure *false], [$2], [$1])],
|
||||||
[$2])])
|
[$2])])
|
||||||
# AT_NAME_PREFIX: also consider api.namespace.
|
# AT_NAME_PREFIX: also consider api.namespace.
|
||||||
m4_pushdef([AT_NAME_PREFIX],
|
m4_pushdef([AT_NAME_PREFIX],
|
||||||
[m4_bmatch([$3], [\(%define api\.\(namespace\|prefix\)\|%name-prefix\) .*],
|
[m4_bmatch([$3], [\(%define api\.\(namespace\|prefix\)\|%name-prefix\) .*],
|
||||||
[m4_bregexp([$3],
|
[m4_bregexp([$3],
|
||||||
[\(%define api\.\(namespace\|prefix\)\|%name-prefix\) [\{\"]\([^""]*\)[\"\}]],
|
[\(%define api\.\(namespace\|prefix\)\|%name-prefix\) [\{\"]\([^\"\}]*\)[\"\}]],
|
||||||
[\3])],
|
[\3])],
|
||||||
[yy])])
|
[yy])])
|
||||||
m4_pushdef([AT_TOKEN_CTOR_IF],
|
m4_pushdef([AT_TOKEN_CTOR_IF],
|
||||||
@@ -193,10 +193,10 @@ m4_pushdef([AT_TOKEN_PREFIX],
|
|||||||
[m4_bmatch([$3], [%define api\.token\.prefix {.*}],
|
[m4_bmatch([$3], [%define api\.token\.prefix {.*}],
|
||||||
[m4_bregexp([$3], [%define api\.token\.prefix {\(.*\)}], [\1])])])
|
[m4_bregexp([$3], [%define api\.token\.prefix {\(.*\)}], [\1])])])
|
||||||
m4_pushdef([AT_VARIANT_IF],
|
m4_pushdef([AT_VARIANT_IF],
|
||||||
[m4_bmatch([$3], [%define api\.value\.type "?variant"?], [$1], [$2])])
|
[m4_bmatch([$3], [%define api\.value\.type variant], [$1], [$2])])
|
||||||
m4_pushdef([AT_API_prefix],
|
m4_pushdef([AT_API_prefix],
|
||||||
[m4_bmatch([$3], [%define api\.prefix ".*"],
|
[m4_bmatch([$3], [%define api\.prefix {.*}],
|
||||||
[m4_bregexp([$3], [%define api\.prefix "\([^""]*\)"], [\1])],
|
[m4_bregexp([$3], [%define api\.prefix {\([^\}]*\)}], [\1])],
|
||||||
[yy])])
|
[yy])])
|
||||||
m4_pushdef([AT_API_PREFIX],
|
m4_pushdef([AT_API_PREFIX],
|
||||||
[m4_toupper(AT_API_prefix)])
|
[m4_toupper(AT_API_prefix)])
|
||||||
@@ -207,7 +207,7 @@ m4_pushdef([AT_API_PREFIX],
|
|||||||
m4_pushdef([AT_YYERROR_ARG_LOC_IF],
|
m4_pushdef([AT_YYERROR_ARG_LOC_IF],
|
||||||
[AT_LOCATION_IF([AT_PURE_IF([m4_bmatch([$3],
|
[AT_LOCATION_IF([AT_PURE_IF([m4_bmatch([$3],
|
||||||
m4_quote(m4_join([\|],
|
m4_quote(m4_join([\|],
|
||||||
[%define api\.pure "?full"?],
|
[%define api\.pure full],
|
||||||
[%glr-parser],
|
[%glr-parser],
|
||||||
[%parse-param],
|
[%parse-param],
|
||||||
[%skeleton "?glr.c"?])),
|
[%skeleton "?glr.c"?])),
|
||||||
|
|||||||
Reference in New Issue
Block a user