• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1m4_divert(-1)                                               -*- Autoconf -*-
2
3# C++ skeleton for Bison
4
5# Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
6
7# This program is free software; you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation; either version 2 of the License, or
10# (at your option) any later version.
11
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15# GNU General Public License for more details.
16
17# You should have received a copy of the GNU General Public License
18# along with this program; if not, write to the Free Software
19# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20# 02110-1301  USA
21
22m4_include(b4_pkgdatadir/[c.m4])
23
24## ---------------- ##
25## Default values.  ##
26## ---------------- ##
27
28# Default parser class name.
29m4_define_default([b4_parser_class_name], [parser])
30m4_define_default([b4_location_type], [location])
31m4_define_default([b4_filename_type], [std::string])
32m4_define_default([b4_namespace], m4_defn([b4_prefix]))
33
34
35# b4_token_enums(LIST-OF-PAIRS-TOKEN-NAME-TOKEN-NUMBER)
36# -----------------------------------------------------
37# Output the definition of the tokens as enums.
38m4_define([b4_token_enums],
39[/* Tokens.  */
40   enum yytokentype {
41m4_map_sep([     b4_token_enum], [,
42],
43           [$@])
44   };
45])
46
47
48## ----------------- ##
49## Semantic Values.  ##
50## ----------------- ##
51
52
53# b4_lhs_value([TYPE])
54# --------------------
55# Expansion of $<TYPE>$.
56m4_define([b4_lhs_value],
57[(yyval[]m4_ifval([$1], [.$1]))])
58
59
60# b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
61# --------------------------------------
62# Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
63# symbols on RHS.
64m4_define([b4_rhs_value],
65[(yysemantic_stack_@{($1) - ($2)@}m4_ifval([$3], [.$3]))])
66
67# b4_lhs_location()
68# -----------------
69# Expansion of @$.
70m4_define([b4_lhs_location],
71[(yyloc)])
72
73
74# b4_rhs_location(RULE-LENGTH, NUM)
75# ---------------------------------
76# Expansion of @NUM, where the current rule has RULE-LENGTH symbols
77# on RHS.
78m4_define([b4_rhs_location],
79[(yylocation_stack_@{($1) - ($2)@})])
80
81
82# b4_parse_param_decl
83# -------------------
84# Extra formal arguments of the constructor.
85# Change the parameter names from "foo" into "foo_yyarg", so that
86# there is no collision bw the user chosen attribute name, and the
87# argument name in the constructor.
88m4_define([b4_parse_param_decl],
89[m4_ifset([b4_parse_param],
90          [m4_map_sep([b4_parse_param_decl_1], [, ], [b4_parse_param])])])
91
92m4_define([b4_parse_param_decl_1],
93[$1_yyarg])
94
95
96
97# b4_parse_param_cons
98# -------------------
99# Extra initialisations of the constructor.
100m4_define([b4_parse_param_cons],
101          [m4_ifset([b4_parse_param],
102		    [,
103      b4_cc_constructor_calls(b4_parse_param)])])
104m4_define([b4_cc_constructor_calls],
105	  [m4_map_sep([b4_cc_constructor_call], [,
106      ], [$@])])
107m4_define([b4_cc_constructor_call],
108	  [$2 ($2_yyarg)])
109
110# b4_parse_param_vars
111# -------------------
112# Extra instance variables.
113m4_define([b4_parse_param_vars],
114          [m4_ifset([b4_parse_param],
115		    [
116    /* User arguments.  */
117b4_cc_var_decls(b4_parse_param)])])
118m4_define([b4_cc_var_decls],
119	  [m4_map_sep([b4_cc_var_decl], [
120], [$@])])
121m4_define([b4_cc_var_decl],
122	  [    $1;])
123