/* Pure parsers. */
[#]define YYPURE b4_pure_flag
+/* Push parsers. */
+[#]define YYPUSH b4_push_flag
+
/* Using locations. */
[#]define YYLSP_NEEDED b4_locations_flag
])
-
## ---------------- ##
## Default values. ##
## ---------------- ##
## Pure/impure interfaces. ##
## ------------------------ ##
-
# b4_user_args
# ------------
m4_define([b4_user_args],
])dnl
])
+
## ------------ ##
## Data Types. ##
## ------------ ##
-
# b4_ints_in(INT1, INT2, LOW, HIGH)
# ---------------------------------
# Return 1 iff both INT1 and INT2 are in [LOW, HIGH], 0 otherwise.
[b4_int_type($1_min, $1_max)])
+## ---------##
+## Values. ##
+## ---------##
+
+# b4_null
+---------
+# Return a null pointer constant. NULL infringes on the user name
+# space in C, so use 0 rather than NULL.
+m4_define([b4_null], [0])
+
+
## ------------------ ##
## Decoding options. ##
## ------------------ ##
# -----------------------------
# Expand IF-TRUE, if FLAG is true, IF-FALSE otherwise.
b4_define_flag_if([defines]) # Whether headers are requested.
-b4_define_flag_if([error_verbose]) # Wheter error are verbose.
+b4_define_flag_if([error_verbose]) # Whether error are verbose.
b4_define_flag_if([locations]) # Whether locations are tracked.
b4_define_flag_if([pure]) # Whether the interface is pure.
b4_define_flag_if([yacc]) # Whether POSIX Yacc is emulated.
+# b4_push_if(IF-TRUE, IF-FALSE)
+# -----------------------------
+# Expand IF-TRUE, if %push-parser, IF-FALSE otherwise.
+m4_define([b4_push_if],
+[m4_if(b4_push_flag, [1],
+ [$1],
+ [$2])])
+
+
## ------------------------- ##
## Assigning token numbers. ##
# b4_basename(NAME)
# -----------------
+# Similar to POSIX basename; the differences don't matter here.
# Beware that NAME is not evaluated.
m4_define([b4_basename],
-[m4_case([$1],
- [/], [/],
- [m4_bpatsubst([$1], [^.*/\([^/]+\)/?$], [\1])])])
-
+[m4_bpatsubst([$1], [^.*/\([^/]+\)/*$], [\1])])
+
# b4_syncline(LINE, FILE)
# -----------------------
m4_define([b4_syncline],
-[b4_flag_if([synclines],
+[b4_flag_if([synclines],
[/* Line __line__ of b4_basename(m4_quote(__file__)). */
[#]line $1 $2])])
## User actions. ##
## -------------- ##
+# b4_case(LABEL, STATEMENTS)
+# --------------------------
+m4_define([b4_case],
+[ case $1:
+$2
+ break;])
+
# b4_symbol_actions(FILENAME, LINENO,
# SYMBOL-TAG, SYMBOL-NUM,
# SYMBOL-ACTION, SYMBOL-TYPENAME)