+# AT_YYLEX_DECLARE_EXTERN
+# AT_YYLEX_DECLARE
+# AT_YYLEX_DEFINE(INPUT-STRING, [ACTION])
+# ---------------------------------------
+m4_define([AT_YYLEX_DECLARE_EXTERN],
+[int yylex (void);dnl
+])
+
+m4_define([AT_YYLEX_DECLARE],
+[static AT_YYLEX_DECLARE_EXTERN[]dnl
+])
+
+m4_define([AT_YYLEX_DEFINE],
+[[#include <stdlib.h> /* abort */
+static int
+yylex (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([[
+ yylloc.first_line = yylloc.last_line = 1;
+ yylloc.first_column = yylloc.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 yyerror (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 (const yy::location &, std::string const &msg)
+{
+ std::cerr << msg << std::endl;
+}]], [[
+#include <stdio.h>
+static void
+yyerror (char const *msg)
+{
+ fprintf (stderr, "%s\n", msg);
+}]])])dnl
+])
+
+## --------------- ##
+## Running Bison. ##
+## --------------- ##
+