xref: /aosp_15_r20/prebuilts/build-tools/common/bison/skeletons/java.m4 (revision cda5da8d549138a6648c5ee6d7a49cf8f4a657be)
1*cda5da8dSAndroid Build Coastguard Worker                                                            -*- Autoconf -*-
2*cda5da8dSAndroid Build Coastguard Worker
3*cda5da8dSAndroid Build Coastguard Worker# Java language support for Bison
4*cda5da8dSAndroid Build Coastguard Worker
5*cda5da8dSAndroid Build Coastguard Worker# Copyright (C) 2007-2015, 2018-2021 Free Software Foundation, Inc.
6*cda5da8dSAndroid Build Coastguard Worker
7*cda5da8dSAndroid Build Coastguard Worker# This program is free software: you can redistribute it and/or modify
8*cda5da8dSAndroid Build Coastguard Worker# it under the terms of the GNU General Public License as published by
9*cda5da8dSAndroid Build Coastguard Worker# the Free Software Foundation, either version 3 of the License, or
10*cda5da8dSAndroid Build Coastguard Worker# (at your option) any later version.
11*cda5da8dSAndroid Build Coastguard Worker#
12*cda5da8dSAndroid Build Coastguard Worker# This program is distributed in the hope that it will be useful,
13*cda5da8dSAndroid Build Coastguard Worker# but WITHOUT ANY WARRANTY; without even the implied warranty of
14*cda5da8dSAndroid Build Coastguard Worker# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15*cda5da8dSAndroid Build Coastguard Worker# GNU General Public License for more details.
16*cda5da8dSAndroid Build Coastguard Worker#
17*cda5da8dSAndroid Build Coastguard Worker# You should have received a copy of the GNU General Public License
18*cda5da8dSAndroid Build Coastguard Worker# along with this program.  If not, see <https://www.gnu.org/licenses/>.
19*cda5da8dSAndroid Build Coastguard Worker
20*cda5da8dSAndroid Build Coastguard Workerm4_include(b4_skeletonsdir/[c-like.m4])
21*cda5da8dSAndroid Build Coastguard Worker
22*cda5da8dSAndroid Build Coastguard Worker
23*cda5da8dSAndroid Build Coastguard Worker# b4_list2(LIST1, LIST2)
24*cda5da8dSAndroid Build Coastguard Worker# ----------------------
25*cda5da8dSAndroid Build Coastguard Worker# Join two lists with a comma if necessary.
26*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_list2],
27*cda5da8dSAndroid Build Coastguard Worker          [$1[]m4_ifval(m4_quote($1), [m4_ifval(m4_quote($2), [[, ]])])[]$2])
28*cda5da8dSAndroid Build Coastguard Worker
29*cda5da8dSAndroid Build Coastguard Worker
30*cda5da8dSAndroid Build Coastguard Worker# b4_percent_define_get3(DEF, PRE, POST, NOT)
31*cda5da8dSAndroid Build Coastguard Worker# -------------------------------------------
32*cda5da8dSAndroid Build Coastguard Worker# Expand to the value of DEF surrounded by PRE and POST if it's %define'ed,
33*cda5da8dSAndroid Build Coastguard Worker# otherwise NOT.
34*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_percent_define_get3],
35*cda5da8dSAndroid Build Coastguard Worker          [m4_ifval(m4_quote(b4_percent_define_get([$1])),
36*cda5da8dSAndroid Build Coastguard Worker                [$2[]b4_percent_define_get([$1])[]$3], [$4])])
37*cda5da8dSAndroid Build Coastguard Worker
38*cda5da8dSAndroid Build Coastguard Worker
39*cda5da8dSAndroid Build Coastguard Worker
40*cda5da8dSAndroid Build Coastguard Worker# b4_flag_value(BOOLEAN-FLAG)
41*cda5da8dSAndroid Build Coastguard Worker# ---------------------------
42*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_flag_value], [b4_flag_if([$1], [true], [false])])
43*cda5da8dSAndroid Build Coastguard Worker
44*cda5da8dSAndroid Build Coastguard Worker
45*cda5da8dSAndroid Build Coastguard Worker# b4_parser_class_declaration
46*cda5da8dSAndroid Build Coastguard Worker# ---------------------------
47*cda5da8dSAndroid Build Coastguard Worker# The declaration of the parser class ("class YYParser"), with all its
48*cda5da8dSAndroid Build Coastguard Worker# qualifiers/annotations.
49*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_default([[api.parser.abstract]], [[false]])
50*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_default([[api.parser.final]],    [[false]])
51*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_default([[api.parser.public]],   [[false]])
52*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_default([[api.parser.strictfp]], [[false]])
53*cda5da8dSAndroid Build Coastguard Worker
54*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_parser_class_declaration],
55*cda5da8dSAndroid Build Coastguard Worker[b4_percent_define_get3([api.parser.annotations], [], [ ])dnl
56*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_flag_if([api.parser.public],   [public ])dnl
57*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_flag_if([api.parser.abstract], [abstract ])dnl
58*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_flag_if([api.parser.final],    [final ])dnl
59*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_flag_if([api.parser.strictfp], [strictfp ])dnl
60*cda5da8dSAndroid Build Coastguard Worker[class ]b4_parser_class[]dnl
61*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_get3([api.parser.extends], [ extends ])dnl
62*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_get3([api.parser.implements], [ implements ])])
63*cda5da8dSAndroid Build Coastguard Worker
64*cda5da8dSAndroid Build Coastguard Worker
65*cda5da8dSAndroid Build Coastguard Worker# b4_lexer_if(TRUE, FALSE)
66*cda5da8dSAndroid Build Coastguard Worker# ------------------------
67*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_lexer_if],
68*cda5da8dSAndroid Build Coastguard Worker[b4_percent_code_ifdef([[lexer]], [$1], [$2])])
69*cda5da8dSAndroid Build Coastguard Worker
70*cda5da8dSAndroid Build Coastguard Worker
71*cda5da8dSAndroid Build Coastguard Worker# b4_identification
72*cda5da8dSAndroid Build Coastguard Worker# -----------------
73*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_identification],
74*cda5da8dSAndroid Build Coastguard Worker[[  /** Version number for the Bison executable that generated this parser.  */
75*cda5da8dSAndroid Build Coastguard Worker  public static final String bisonVersion = "]b4_version_string[";
76*cda5da8dSAndroid Build Coastguard Worker
77*cda5da8dSAndroid Build Coastguard Worker  /** Name of the skeleton that generated this parser.  */
78*cda5da8dSAndroid Build Coastguard Worker  public static final String bisonSkeleton = ]b4_skeleton[;
79*cda5da8dSAndroid Build Coastguard Worker]])
80*cda5da8dSAndroid Build Coastguard Worker
81*cda5da8dSAndroid Build Coastguard Worker
82*cda5da8dSAndroid Build Coastguard Worker## ------------ ##
83*cda5da8dSAndroid Build Coastguard Worker## Data types.  ##
84*cda5da8dSAndroid Build Coastguard Worker## ------------ ##
85*cda5da8dSAndroid Build Coastguard Worker
86*cda5da8dSAndroid Build Coastguard Worker# b4_int_type(MIN, MAX)
87*cda5da8dSAndroid Build Coastguard Worker# ---------------------
88*cda5da8dSAndroid Build Coastguard Worker# Return the smallest int type able to handle numbers ranging from
89*cda5da8dSAndroid Build Coastguard Worker# MIN to MAX (included).
90*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_int_type],
91*cda5da8dSAndroid Build Coastguard Worker[m4_if(b4_ints_in($@,   [-128],   [127]), [1], [byte],
92*cda5da8dSAndroid Build Coastguard Worker       b4_ints_in($@, [-32768], [32767]), [1], [short],
93*cda5da8dSAndroid Build Coastguard Worker                                               [int])])
94*cda5da8dSAndroid Build Coastguard Worker
95*cda5da8dSAndroid Build Coastguard Worker# b4_int_type_for(NAME)
96*cda5da8dSAndroid Build Coastguard Worker# ---------------------
97*cda5da8dSAndroid Build Coastguard Worker# Return the smallest int type able to handle numbers ranging from
98*cda5da8dSAndroid Build Coastguard Worker# 'NAME_min' to 'NAME_max' (included).
99*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_int_type_for],
100*cda5da8dSAndroid Build Coastguard Worker[b4_int_type($1_min, $1_max)])
101*cda5da8dSAndroid Build Coastguard Worker
102*cda5da8dSAndroid Build Coastguard Worker# b4_null
103*cda5da8dSAndroid Build Coastguard Worker# -------
104*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_null], [null])
105*cda5da8dSAndroid Build Coastguard Worker
106*cda5da8dSAndroid Build Coastguard Worker
107*cda5da8dSAndroid Build Coastguard Worker# b4_typed_parser_table_define(TYPE, NAME, DATA, COMMENT)
108*cda5da8dSAndroid Build Coastguard Worker# -------------------------------------------------------
109*cda5da8dSAndroid Build Coastguard Worker# We use intermediate functions (e.g., yypact_init) to work around the
110*cda5da8dSAndroid Build Coastguard Worker# 64KB limit for JVM methods.  See
111*cda5da8dSAndroid Build Coastguard Worker# https://lists.gnu.org/r/help-bison/2008-11/msg00004.html.
112*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_typed_parser_table_define],
113*cda5da8dSAndroid Build Coastguard Worker[m4_ifval([$4], [b4_comment([$4])
114*cda5da8dSAndroid Build Coastguard Worker  ])dnl
115*cda5da8dSAndroid Build Coastguard Worker[private static final ]$1[[] yy$2_ = yy$2_init();
116*cda5da8dSAndroid Build Coastguard Worker  private static final ]$1[[] yy$2_init()
117*cda5da8dSAndroid Build Coastguard Worker  {
118*cda5da8dSAndroid Build Coastguard Worker    return new ]$1[[]
119*cda5da8dSAndroid Build Coastguard Worker    {
120*cda5da8dSAndroid Build Coastguard Worker  ]$3[
121*cda5da8dSAndroid Build Coastguard Worker    };
122*cda5da8dSAndroid Build Coastguard Worker  }]])
123*cda5da8dSAndroid Build Coastguard Worker
124*cda5da8dSAndroid Build Coastguard Worker
125*cda5da8dSAndroid Build Coastguard Worker# b4_integral_parser_table_define(NAME, DATA, COMMENT)
126*cda5da8dSAndroid Build Coastguard Worker#-----------------------------------------------------
127*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_integral_parser_table_define],
128*cda5da8dSAndroid Build Coastguard Worker[b4_typed_parser_table_define([b4_int_type_for([$2])], [$1], [$2], [$3])])
129*cda5da8dSAndroid Build Coastguard Worker
130*cda5da8dSAndroid Build Coastguard Worker
131*cda5da8dSAndroid Build Coastguard Worker## ------------- ##
132*cda5da8dSAndroid Build Coastguard Worker## Token kinds.  ##
133*cda5da8dSAndroid Build Coastguard Worker## ------------- ##
134*cda5da8dSAndroid Build Coastguard Worker
135*cda5da8dSAndroid Build Coastguard Worker
136*cda5da8dSAndroid Build Coastguard Worker# b4_token_enum(TOKEN-NUM)
137*cda5da8dSAndroid Build Coastguard Worker# ------------------------
138*cda5da8dSAndroid Build Coastguard Worker# Output the definition of this token as an enum.
139*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_token_enum],
140*cda5da8dSAndroid Build Coastguard Worker[b4_token_visible_if([$1],
141*cda5da8dSAndroid Build Coastguard Worker    [m4_format([[    /** Token %s, to be returned by the scanner.  */
142*cda5da8dSAndroid Build Coastguard Worker    static final int %s = %s%s;
143*cda5da8dSAndroid Build Coastguard Worker]],
144*cda5da8dSAndroid Build Coastguard Worker               b4_symbol([$1], [tag]),
145*cda5da8dSAndroid Build Coastguard Worker               b4_symbol([$1], [id]),
146*cda5da8dSAndroid Build Coastguard Worker               b4_symbol([$1], b4_api_token_raw_if([[number]], [[code]])))])])
147*cda5da8dSAndroid Build Coastguard Worker
148*cda5da8dSAndroid Build Coastguard Worker
149*cda5da8dSAndroid Build Coastguard Worker# b4_token_enums
150*cda5da8dSAndroid Build Coastguard Worker# --------------
151*cda5da8dSAndroid Build Coastguard Worker# Output the definition of the tokens (if there are) as enums.
152*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_token_enums],
153*cda5da8dSAndroid Build Coastguard Worker[b4_any_token_visible_if([    /* Token kinds.  */
154*cda5da8dSAndroid Build Coastguard Workerb4_symbol_foreach([b4_token_enum])])])
155*cda5da8dSAndroid Build Coastguard Worker
156*cda5da8dSAndroid Build Coastguard Worker
157*cda5da8dSAndroid Build Coastguard Worker
158*cda5da8dSAndroid Build Coastguard Worker## -------------- ##
159*cda5da8dSAndroid Build Coastguard Worker## Symbol kinds.  ##
160*cda5da8dSAndroid Build Coastguard Worker## -------------- ##
161*cda5da8dSAndroid Build Coastguard Worker
162*cda5da8dSAndroid Build Coastguard Worker
163*cda5da8dSAndroid Build Coastguard Worker# b4_symbol_kind(NUM)
164*cda5da8dSAndroid Build Coastguard Worker# -------------------
165*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_symbol_kind],
166*cda5da8dSAndroid Build Coastguard Worker[SymbolKind.b4_symbol_kind_base($@)])
167*cda5da8dSAndroid Build Coastguard Worker
168*cda5da8dSAndroid Build Coastguard Worker
169*cda5da8dSAndroid Build Coastguard Worker# b4_symbol_enum(SYMBOL-NUM)
170*cda5da8dSAndroid Build Coastguard Worker# --------------------------
171*cda5da8dSAndroid Build Coastguard Worker# Output the definition of this symbol as an enum.
172*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_symbol_enum],
173*cda5da8dSAndroid Build Coastguard Worker[m4_format([    %-30s %s],
174*cda5da8dSAndroid Build Coastguard Worker           m4_format([[%s(%s)%s]],
175*cda5da8dSAndroid Build Coastguard Worker                     b4_symbol([$1], [kind_base]),
176*cda5da8dSAndroid Build Coastguard Worker                     [$1],
177*cda5da8dSAndroid Build Coastguard Worker                     m4_if([$1], b4_last_symbol, [[;]], [[,]])),
178*cda5da8dSAndroid Build Coastguard Worker           [b4_symbol_tag_comment([$1])])])
179*cda5da8dSAndroid Build Coastguard Worker
180*cda5da8dSAndroid Build Coastguard Worker
181*cda5da8dSAndroid Build Coastguard Worker# b4_declare_symbol_enum
182*cda5da8dSAndroid Build Coastguard Worker# ----------------------
183*cda5da8dSAndroid Build Coastguard Worker# The definition of the symbol internal numbers as an enum.
184*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_declare_symbol_enum],
185*cda5da8dSAndroid Build Coastguard Worker[[  public enum SymbolKind
186*cda5da8dSAndroid Build Coastguard Worker  {
187*cda5da8dSAndroid Build Coastguard Worker]b4_symbol_foreach([b4_symbol_enum])[
188*cda5da8dSAndroid Build Coastguard Worker
189*cda5da8dSAndroid Build Coastguard Worker    private final int yycode_;
190*cda5da8dSAndroid Build Coastguard Worker
191*cda5da8dSAndroid Build Coastguard Worker    SymbolKind (int n) {
192*cda5da8dSAndroid Build Coastguard Worker      this.yycode_ = n;
193*cda5da8dSAndroid Build Coastguard Worker    }
194*cda5da8dSAndroid Build Coastguard Worker
195*cda5da8dSAndroid Build Coastguard Worker    private static final SymbolKind[] values_ = {
196*cda5da8dSAndroid Build Coastguard Worker      ]m4_map_args_sep([b4_symbol_kind(], [)], [,
197*cda5da8dSAndroid Build Coastguard Worker      ], b4_symbol_numbers)[
198*cda5da8dSAndroid Build Coastguard Worker    };
199*cda5da8dSAndroid Build Coastguard Worker
200*cda5da8dSAndroid Build Coastguard Worker    static final SymbolKind get(int code) {
201*cda5da8dSAndroid Build Coastguard Worker      return values_[code];
202*cda5da8dSAndroid Build Coastguard Worker    }
203*cda5da8dSAndroid Build Coastguard Worker
204*cda5da8dSAndroid Build Coastguard Worker    public final int getCode() {
205*cda5da8dSAndroid Build Coastguard Worker      return this.yycode_;
206*cda5da8dSAndroid Build Coastguard Worker    }
207*cda5da8dSAndroid Build Coastguard Worker
208*cda5da8dSAndroid Build Coastguard Worker]b4_parse_error_bmatch(
209*cda5da8dSAndroid Build Coastguard Worker[simple\|verbose],
210*cda5da8dSAndroid Build Coastguard Worker[[    /* Return YYSTR after stripping away unnecessary quotes and
211*cda5da8dSAndroid Build Coastguard Worker       backslashes, so that it's suitable for yyerror.  The heuristic is
212*cda5da8dSAndroid Build Coastguard Worker       that double-quoting is unnecessary unless the string contains an
213*cda5da8dSAndroid Build Coastguard Worker       apostrophe, a comma, or backslash (other than backslash-backslash).
214*cda5da8dSAndroid Build Coastguard Worker       YYSTR is taken from yytname.  */
215*cda5da8dSAndroid Build Coastguard Worker    private static String yytnamerr_(String yystr)
216*cda5da8dSAndroid Build Coastguard Worker    {
217*cda5da8dSAndroid Build Coastguard Worker      if (yystr.charAt (0) == '"')
218*cda5da8dSAndroid Build Coastguard Worker        {
219*cda5da8dSAndroid Build Coastguard Worker          StringBuffer yyr = new StringBuffer();
220*cda5da8dSAndroid Build Coastguard Worker          strip_quotes: for (int i = 1; i < yystr.length(); i++)
221*cda5da8dSAndroid Build Coastguard Worker            switch (yystr.charAt(i))
222*cda5da8dSAndroid Build Coastguard Worker              {
223*cda5da8dSAndroid Build Coastguard Worker              case '\'':
224*cda5da8dSAndroid Build Coastguard Worker              case ',':
225*cda5da8dSAndroid Build Coastguard Worker                break strip_quotes;
226*cda5da8dSAndroid Build Coastguard Worker
227*cda5da8dSAndroid Build Coastguard Worker              case '\\':
228*cda5da8dSAndroid Build Coastguard Worker                if (yystr.charAt(++i) != '\\')
229*cda5da8dSAndroid Build Coastguard Worker                  break strip_quotes;
230*cda5da8dSAndroid Build Coastguard Worker                /* Fall through.  */
231*cda5da8dSAndroid Build Coastguard Worker              default:
232*cda5da8dSAndroid Build Coastguard Worker                yyr.append(yystr.charAt(i));
233*cda5da8dSAndroid Build Coastguard Worker                break;
234*cda5da8dSAndroid Build Coastguard Worker
235*cda5da8dSAndroid Build Coastguard Worker              case '"':
236*cda5da8dSAndroid Build Coastguard Worker                return yyr.toString();
237*cda5da8dSAndroid Build Coastguard Worker              }
238*cda5da8dSAndroid Build Coastguard Worker        }
239*cda5da8dSAndroid Build Coastguard Worker      return yystr;
240*cda5da8dSAndroid Build Coastguard Worker    }
241*cda5da8dSAndroid Build Coastguard Worker
242*cda5da8dSAndroid Build Coastguard Worker    /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
243*cda5da8dSAndroid Build Coastguard Worker       First, the terminals, then, starting at \a YYNTOKENS_, nonterminals.  */
244*cda5da8dSAndroid Build Coastguard Worker    ]b4_typed_parser_table_define([String], [tname], [b4_tname])[
245*cda5da8dSAndroid Build Coastguard Worker
246*cda5da8dSAndroid Build Coastguard Worker    /* The user-facing name of this symbol.  */
247*cda5da8dSAndroid Build Coastguard Worker    public final String getName() {
248*cda5da8dSAndroid Build Coastguard Worker      return yytnamerr_(yytname_[yycode_]);
249*cda5da8dSAndroid Build Coastguard Worker    }
250*cda5da8dSAndroid Build Coastguard Worker]],
251*cda5da8dSAndroid Build Coastguard Worker[custom\|detailed],
252*cda5da8dSAndroid Build Coastguard Worker[[    /* YYNAMES_[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
253*cda5da8dSAndroid Build Coastguard Worker       First, the terminals, then, starting at \a YYNTOKENS_, nonterminals.  */
254*cda5da8dSAndroid Build Coastguard Worker    ]b4_typed_parser_table_define([String], [names], [b4_symbol_names])[
255*cda5da8dSAndroid Build Coastguard Worker
256*cda5da8dSAndroid Build Coastguard Worker    /* The user-facing name of this symbol.  */
257*cda5da8dSAndroid Build Coastguard Worker    public final String getName() {
258*cda5da8dSAndroid Build Coastguard Worker      return yynames_[yycode_];
259*cda5da8dSAndroid Build Coastguard Worker    }]])[
260*cda5da8dSAndroid Build Coastguard Worker  };
261*cda5da8dSAndroid Build Coastguard Worker]])])
262*cda5da8dSAndroid Build Coastguard Worker
263*cda5da8dSAndroid Build Coastguard Worker
264*cda5da8dSAndroid Build Coastguard Worker
265*cda5da8dSAndroid Build Coastguard Worker# b4_case(ID, CODE, [COMMENTS])
266*cda5da8dSAndroid Build Coastguard Worker# -----------------------------
267*cda5da8dSAndroid Build Coastguard Worker# We need to fool Java's stupid unreachable code detection.
268*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_case],
269*cda5da8dSAndroid Build Coastguard Worker[  case $1:m4_ifval([$3], [ b4_comment([$3])])
270*cda5da8dSAndroid Build Coastguard Worker  if (yyn == $1)
271*cda5da8dSAndroid Build Coastguard Worker    $2;
272*cda5da8dSAndroid Build Coastguard Worker  break;
273*cda5da8dSAndroid Build Coastguard Worker])
274*cda5da8dSAndroid Build Coastguard Worker
275*cda5da8dSAndroid Build Coastguard Worker
276*cda5da8dSAndroid Build Coastguard Worker# b4_predicate_case(LABEL, CONDITIONS)
277*cda5da8dSAndroid Build Coastguard Worker# ------------------------------------
278*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_predicate_case],
279*cda5da8dSAndroid Build Coastguard Worker[  case $1:
280*cda5da8dSAndroid Build Coastguard Worker     if (! ($2)) YYERROR;
281*cda5da8dSAndroid Build Coastguard Worker    break;
282*cda5da8dSAndroid Build Coastguard Worker])
283*cda5da8dSAndroid Build Coastguard Worker
284*cda5da8dSAndroid Build Coastguard Worker
285*cda5da8dSAndroid Build Coastguard Worker## -------- ##
286*cda5da8dSAndroid Build Coastguard Worker## Checks.  ##
287*cda5da8dSAndroid Build Coastguard Worker## -------- ##
288*cda5da8dSAndroid Build Coastguard Worker
289*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_check_kind([[api.value.type]],    [code], [deprecated])
290*cda5da8dSAndroid Build Coastguard Worker
291*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_check_kind([[annotations]],       [code], [deprecated])
292*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_check_kind([[extends]],           [code], [deprecated])
293*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_check_kind([[implements]],        [code], [deprecated])
294*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_check_kind([[init_throws]],       [code], [deprecated])
295*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_check_kind([[lex_throws]],        [code], [deprecated])
296*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_check_kind([[api.parser.class]],  [code], [deprecated])
297*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_check_kind([[throws]],            [code], [deprecated])
298*cda5da8dSAndroid Build Coastguard Worker
299*cda5da8dSAndroid Build Coastguard Worker
300*cda5da8dSAndroid Build Coastguard Worker
301*cda5da8dSAndroid Build Coastguard Worker## ---------------- ##
302*cda5da8dSAndroid Build Coastguard Worker## Default values.  ##
303*cda5da8dSAndroid Build Coastguard Worker## ---------------- ##
304*cda5da8dSAndroid Build Coastguard Worker
305*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_yystype], [b4_percent_define_get([[api.value.type]])])
306*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_default([[api.value.type]], [[Object]])
307*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_default([[api.symbol.prefix]], [[S_]])
308*cda5da8dSAndroid Build Coastguard Worker
309*cda5da8dSAndroid Build Coastguard Worker# b4_api_prefix, b4_api_PREFIX
310*cda5da8dSAndroid Build Coastguard Worker# ----------------------------
311*cda5da8dSAndroid Build Coastguard Worker# Corresponds to %define api.prefix
312*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_default([[api.prefix]], [[YY]])
313*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_api_prefix],
314*cda5da8dSAndroid Build Coastguard Worker[b4_percent_define_get([[api.prefix]])])
315*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_api_PREFIX],
316*cda5da8dSAndroid Build Coastguard Worker[m4_toupper(b4_api_prefix)])
317*cda5da8dSAndroid Build Coastguard Worker
318*cda5da8dSAndroid Build Coastguard Worker# b4_prefix
319*cda5da8dSAndroid Build Coastguard Worker# ---------
320*cda5da8dSAndroid Build Coastguard Worker# If the %name-prefix is not given, it is api.prefix.
321*cda5da8dSAndroid Build Coastguard Workerm4_define_default([b4_prefix], [b4_api_prefix])
322*cda5da8dSAndroid Build Coastguard Worker
323*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_default([[api.parser.class]], [b4_prefix[]Parser])
324*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_parser_class], [b4_percent_define_get([[api.parser.class]])])
325*cda5da8dSAndroid Build Coastguard Worker
326*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_default([[lex_throws]], [[java.io.IOException]])
327*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_lex_throws], [b4_percent_define_get([[lex_throws]])])
328*cda5da8dSAndroid Build Coastguard Worker
329*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_default([[throws]], [])
330*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_throws], [b4_percent_define_get([[throws]])])
331*cda5da8dSAndroid Build Coastguard Worker
332*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_default([[init_throws]], [])
333*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_init_throws], [b4_percent_define_get([[init_throws]])])
334*cda5da8dSAndroid Build Coastguard Worker
335*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_default([[api.location.type]], [Location])
336*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_location_type], [b4_percent_define_get([[api.location.type]])])
337*cda5da8dSAndroid Build Coastguard Worker
338*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_default([[api.position.type]], [Position])
339*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_position_type], [b4_percent_define_get([[api.position.type]])])
340*cda5da8dSAndroid Build Coastguard Worker
341*cda5da8dSAndroid Build Coastguard Worker
342*cda5da8dSAndroid Build Coastguard Worker## ----------------- ##
343*cda5da8dSAndroid Build Coastguard Worker## Semantic Values.  ##
344*cda5da8dSAndroid Build Coastguard Worker## ----------------- ##
345*cda5da8dSAndroid Build Coastguard Worker
346*cda5da8dSAndroid Build Coastguard Worker
347*cda5da8dSAndroid Build Coastguard Worker# b4_symbol_translate(STRING)
348*cda5da8dSAndroid Build Coastguard Worker# ---------------------------
349*cda5da8dSAndroid Build Coastguard Worker# Used by "bison" in the array of symbol names to mark those that
350*cda5da8dSAndroid Build Coastguard Worker# require translation.
351*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_symbol_translate],
352*cda5da8dSAndroid Build Coastguard Worker[[i18n($1)]])
353*cda5da8dSAndroid Build Coastguard Worker
354*cda5da8dSAndroid Build Coastguard Worker
355*cda5da8dSAndroid Build Coastguard Worker# b4_trans(STRING)
356*cda5da8dSAndroid Build Coastguard Worker# ----------------
357*cda5da8dSAndroid Build Coastguard Worker# Translate a string if i18n is enabled.  Avoid collision with b4_translate.
358*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_trans],
359*cda5da8dSAndroid Build Coastguard Worker[b4_has_translations_if([i18n($1)], [$1])])
360*cda5da8dSAndroid Build Coastguard Worker
361*cda5da8dSAndroid Build Coastguard Worker
362*cda5da8dSAndroid Build Coastguard Worker
363*cda5da8dSAndroid Build Coastguard Worker# b4_symbol_value(VAL, [SYMBOL-NUM], [TYPE-TAG])
364*cda5da8dSAndroid Build Coastguard Worker# ----------------------------------------------
365*cda5da8dSAndroid Build Coastguard Worker# See README.
366*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_symbol_value],
367*cda5da8dSAndroid Build Coastguard Worker[m4_ifval([$3],
368*cda5da8dSAndroid Build Coastguard Worker          [(($3)($1))],
369*cda5da8dSAndroid Build Coastguard Worker          [m4_ifval([$2],
370*cda5da8dSAndroid Build Coastguard Worker                    [b4_symbol_if([$2], [has_type],
371*cda5da8dSAndroid Build Coastguard Worker                                  [((b4_symbol([$2], [type]))($1))],
372*cda5da8dSAndroid Build Coastguard Worker                                  [$1])],
373*cda5da8dSAndroid Build Coastguard Worker                    [$1])])])
374*cda5da8dSAndroid Build Coastguard Worker
375*cda5da8dSAndroid Build Coastguard Worker
376*cda5da8dSAndroid Build Coastguard Worker# b4_lhs_value([SYMBOL-NUM], [TYPE])
377*cda5da8dSAndroid Build Coastguard Worker# ----------------------------------
378*cda5da8dSAndroid Build Coastguard Worker# See README.
379*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_lhs_value], [yyval])
380*cda5da8dSAndroid Build Coastguard Worker
381*cda5da8dSAndroid Build Coastguard Worker
382*cda5da8dSAndroid Build Coastguard Worker# b4_rhs_data(RULE-LENGTH, POS)
383*cda5da8dSAndroid Build Coastguard Worker# -----------------------------
384*cda5da8dSAndroid Build Coastguard Worker# See README.
385*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_rhs_data],
386*cda5da8dSAndroid Build Coastguard Worker[yystack.valueAt (b4_subtract($@))])
387*cda5da8dSAndroid Build Coastguard Worker
388*cda5da8dSAndroid Build Coastguard Worker# b4_rhs_value(RULE-LENGTH, POS, SYMBOL-NUM, [TYPE])
389*cda5da8dSAndroid Build Coastguard Worker# --------------------------------------------------
390*cda5da8dSAndroid Build Coastguard Worker# See README.
391*cda5da8dSAndroid Build Coastguard Worker#
392*cda5da8dSAndroid Build Coastguard Worker# In this simple implementation, %token and %type have class names
393*cda5da8dSAndroid Build Coastguard Worker# between the angle brackets.
394*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_rhs_value],
395*cda5da8dSAndroid Build Coastguard Worker[b4_symbol_value([b4_rhs_data([$1], [$2])], [$3], [$4])])
396*cda5da8dSAndroid Build Coastguard Worker
397*cda5da8dSAndroid Build Coastguard Worker
398*cda5da8dSAndroid Build Coastguard Worker# b4_lhs_location()
399*cda5da8dSAndroid Build Coastguard Worker# -----------------
400*cda5da8dSAndroid Build Coastguard Worker# Expansion of @$.
401*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_lhs_location],
402*cda5da8dSAndroid Build Coastguard Worker[(yyloc)])
403*cda5da8dSAndroid Build Coastguard Worker
404*cda5da8dSAndroid Build Coastguard Worker
405*cda5da8dSAndroid Build Coastguard Worker# b4_rhs_location(RULE-LENGTH, POS)
406*cda5da8dSAndroid Build Coastguard Worker# ---------------------------------
407*cda5da8dSAndroid Build Coastguard Worker# Expansion of @POS, where the current rule has RULE-LENGTH symbols
408*cda5da8dSAndroid Build Coastguard Worker# on RHS.
409*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_rhs_location],
410*cda5da8dSAndroid Build Coastguard Worker[yystack.locationAt (b4_subtract($@))])
411*cda5da8dSAndroid Build Coastguard Worker
412*cda5da8dSAndroid Build Coastguard Worker
413*cda5da8dSAndroid Build Coastguard Worker# b4_lex_param
414*cda5da8dSAndroid Build Coastguard Worker# b4_parse_param
415*cda5da8dSAndroid Build Coastguard Worker# --------------
416*cda5da8dSAndroid Build Coastguard Worker# If defined, b4_lex_param arrives double quoted, but below we prefer
417*cda5da8dSAndroid Build Coastguard Worker# it to be single quoted.  Same for b4_parse_param.
418*cda5da8dSAndroid Build Coastguard Worker
419*cda5da8dSAndroid Build Coastguard Worker# TODO: should be in bison.m4
420*cda5da8dSAndroid Build Coastguard Workerm4_define_default([b4_lex_param], [[]])
421*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_lex_param], b4_lex_param)
422*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_parse_param], b4_parse_param)
423*cda5da8dSAndroid Build Coastguard Worker
424*cda5da8dSAndroid Build Coastguard Worker# b4_lex_param_decl
425*cda5da8dSAndroid Build Coastguard Worker# -----------------
426*cda5da8dSAndroid Build Coastguard Worker# Extra formal arguments of the constructor.
427*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_lex_param_decl],
428*cda5da8dSAndroid Build Coastguard Worker[m4_ifset([b4_lex_param],
429*cda5da8dSAndroid Build Coastguard Worker          [b4_remove_comma([$1],
430*cda5da8dSAndroid Build Coastguard Worker                           b4_param_decls(b4_lex_param))],
431*cda5da8dSAndroid Build Coastguard Worker          [$1])])
432*cda5da8dSAndroid Build Coastguard Worker
433*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_param_decls],
434*cda5da8dSAndroid Build Coastguard Worker          [m4_map([b4_param_decl], [$@])])
435*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_param_decl], [, $1])
436*cda5da8dSAndroid Build Coastguard Worker
437*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_remove_comma], [m4_ifval(m4_quote($1), [$1, ], [])m4_shift2($@)])
438*cda5da8dSAndroid Build Coastguard Worker
439*cda5da8dSAndroid Build Coastguard Worker
440*cda5da8dSAndroid Build Coastguard Worker
441*cda5da8dSAndroid Build Coastguard Worker# b4_parse_param_decl
442*cda5da8dSAndroid Build Coastguard Worker# -------------------
443*cda5da8dSAndroid Build Coastguard Worker# Extra formal arguments of the constructor.
444*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_parse_param_decl],
445*cda5da8dSAndroid Build Coastguard Worker[m4_ifset([b4_parse_param],
446*cda5da8dSAndroid Build Coastguard Worker          [b4_remove_comma([$1],
447*cda5da8dSAndroid Build Coastguard Worker                           b4_param_decls(b4_parse_param))],
448*cda5da8dSAndroid Build Coastguard Worker          [$1])])
449*cda5da8dSAndroid Build Coastguard Worker
450*cda5da8dSAndroid Build Coastguard Worker
451*cda5da8dSAndroid Build Coastguard Worker
452*cda5da8dSAndroid Build Coastguard Worker# b4_lex_param_call
453*cda5da8dSAndroid Build Coastguard Worker# -----------------
454*cda5da8dSAndroid Build Coastguard Worker# Delegating the lexer parameters to the lexer constructor.
455*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_lex_param_call],
456*cda5da8dSAndroid Build Coastguard Worker          [m4_ifset([b4_lex_param],
457*cda5da8dSAndroid Build Coastguard Worker                    [b4_remove_comma([$1],
458*cda5da8dSAndroid Build Coastguard Worker                                     b4_param_calls(b4_lex_param))],
459*cda5da8dSAndroid Build Coastguard Worker                    [$1])])
460*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_param_calls],
461*cda5da8dSAndroid Build Coastguard Worker          [m4_map([b4_param_call], [$@])])
462*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_param_call], [, $2])
463*cda5da8dSAndroid Build Coastguard Worker
464*cda5da8dSAndroid Build Coastguard Worker
465*cda5da8dSAndroid Build Coastguard Worker
466*cda5da8dSAndroid Build Coastguard Worker# b4_parse_param_cons
467*cda5da8dSAndroid Build Coastguard Worker# -------------------
468*cda5da8dSAndroid Build Coastguard Worker# Extra initialisations of the constructor.
469*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_parse_param_cons],
470*cda5da8dSAndroid Build Coastguard Worker          [m4_ifset([b4_parse_param],
471*cda5da8dSAndroid Build Coastguard Worker                    [b4_constructor_calls(b4_parse_param)])])
472*cda5da8dSAndroid Build Coastguard Worker
473*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_constructor_calls],
474*cda5da8dSAndroid Build Coastguard Worker          [m4_map([b4_constructor_call], [$@])])
475*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_constructor_call],
476*cda5da8dSAndroid Build Coastguard Worker          [this.$2 = $2;
477*cda5da8dSAndroid Build Coastguard Worker          ])
478*cda5da8dSAndroid Build Coastguard Worker
479*cda5da8dSAndroid Build Coastguard Worker
480*cda5da8dSAndroid Build Coastguard Worker
481*cda5da8dSAndroid Build Coastguard Worker# b4_parse_param_vars
482*cda5da8dSAndroid Build Coastguard Worker# -------------------
483*cda5da8dSAndroid Build Coastguard Worker# Extra instance variables.
484*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_parse_param_vars],
485*cda5da8dSAndroid Build Coastguard Worker          [m4_ifset([b4_parse_param],
486*cda5da8dSAndroid Build Coastguard Worker                    [
487*cda5da8dSAndroid Build Coastguard Worker    /* User arguments.  */
488*cda5da8dSAndroid Build Coastguard Workerb4_var_decls(b4_parse_param)])])
489*cda5da8dSAndroid Build Coastguard Worker
490*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_var_decls],
491*cda5da8dSAndroid Build Coastguard Worker          [m4_map_sep([b4_var_decl], [
492*cda5da8dSAndroid Build Coastguard Worker], [$@])])
493*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_var_decl],
494*cda5da8dSAndroid Build Coastguard Worker          [    protected final $1;])
495*cda5da8dSAndroid Build Coastguard Worker
496*cda5da8dSAndroid Build Coastguard Worker
497*cda5da8dSAndroid Build Coastguard Worker
498*cda5da8dSAndroid Build Coastguard Worker# b4_maybe_throws(THROWS)
499*cda5da8dSAndroid Build Coastguard Worker# -----------------------
500*cda5da8dSAndroid Build Coastguard Worker# Expand to either an empty string or "throws THROWS".
501*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_maybe_throws],
502*cda5da8dSAndroid Build Coastguard Worker          [m4_ifval($1, [ throws $1])])
503