+# AT_YYLEX_DECLARE_EXTERN
+# AT_YYLEX_DECLARE
+# AT_YYLEX_DEFINE(INPUT-STRING, [ACTION])
+# ---------------------------------------
+m4_define([AT_YYLEX_DECLARE_EXTERN],
+[int AT_API_PREFIX[]lex (void);dnl
+])
+
+m4_define([AT_YYLEX_DECLARE],
+[static AT_YYLEX_DECLARE_EXTERN[]dnl
+])
+
+m4_define([AT_YYLEX_DEFINE],
+[[#include <stdlib.h> /* abort */
+static int
+]AT_API_PREFIX[lex (void)
+{
+ static char const input[] = "$1";
+ static size_t toknum = 0;
+ int res;
+ if (! (toknum < sizeof input))
+ abort ();
+ res = input[toknum++];
+ ]$2;[]AT_LOCATION_IF([[
+ ]AT_API_PREFIX[lloc.first_line = ]AT_API_PREFIX[lloc.last_line = 1;
+ ]AT_API_PREFIX[lloc.first_column = ]AT_API_PREFIX[lloc.last_column = toknum;]])[
+ return res;
+}]dnl
+])
+
+# AT_YYERROR_DECLARE_EXTERN
+# AT_YYERROR_DECLARE
+# AT_YYERROR_DEFINE
+# -------------------------
+# Beware that must be called inside a AT_BISON_OPTION_PUSHDEFS/POPDEFS
+# pair.
+m4_define([AT_YYERROR_DECLARE_EXTERN],
+[void AT_API_PREFIX[]error (const char *msg);dnl
+])
+
+m4_define([AT_YYERROR_DECLARE],
+[static AT_YYERROR_DECLARE_EXTERN[]dnl
+])
+
+m4_define([AT_YYERROR_DEFINE],
+[AT_SKEL_JAVA_IF([[public void yyerror (String msg)
+{
+ System.err.println (msg);
+}]], [AT_SKEL_CC_IF([[void
+yy::parser::error (]AT_LOCATION_IF([[const yy::location &, ]])[std::string const &msg)
+{
+ std::cerr << msg << std::endl;
+}]], [[#include <stdio.h>
+static void
+]AT_API_PREFIX[error (char const *msg)
+{
+ fprintf (stderr, "%s\n", msg);
+}]])])dnl
+])
+
+## --------------- ##
+## Running Bison. ##
+## --------------- ##
+