+AT_CHECK_CALC_LALR([%define api.pure %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_LALR([%define api.push_pull "both" %define api.pure %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
+
+AT_CHECK_CALC_LALR([%define api.pure %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+
+
+# ----------------------- #
+# Simple GLR Calculator. #
+# ----------------------- #
+
+AT_BANNER([[Simple GLR Calculator.]])
+
+# AT_CHECK_CALC_GLR([BISON-OPTIONS])
+# ----------------------------------
+# Start a testing chunk which compiles `calc' grammar with
+# BISON-OPTIONS and %glr-parser, and performs several tests over the parser.
+m4_define([AT_CHECK_CALC_GLR],
+[AT_CHECK_CALC([%glr-parser] $@)])
+
+
+AT_CHECK_CALC_GLR()
+
+AT_CHECK_CALC_GLR([%defines])
+AT_CHECK_CALC_GLR([%locations])
+AT_CHECK_CALC_GLR([%name-prefix "calc"])
+AT_CHECK_CALC_GLR([%verbose])
+AT_CHECK_CALC_GLR([%yacc])
+AT_CHECK_CALC_GLR([%error-verbose])
+
+AT_CHECK_CALC_GLR([%define api.pure %locations])
+AT_CHECK_CALC_GLR([%error-verbose %locations])
+
+AT_CHECK_CALC_GLR([%error-verbose %locations %defines %name-prefix "calc" %verbose %yacc])
+
+AT_CHECK_CALC_GLR([%debug])
+AT_CHECK_CALC_GLR([%error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
+
+AT_CHECK_CALC_GLR([%define api.pure %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
+
+AT_CHECK_CALC_GLR([%define api.pure %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+
+
+# ----------------------------- #
+# Simple LALR1 C++ Calculator. #
+# ----------------------------- #
+
+AT_BANNER([[Simple LALR(1) C++ Calculator.]])
+
+# First let's try using %skeleton
+AT_CHECK_CALC([%skeleton "lalr1.cc" %defines %locations])
+
+# AT_CHECK_CALC_LALR1_CC([BISON-OPTIONS])
+# ---------------------------------------
+# Start a testing chunk which compiles `calc' grammar with
+# the C++ skeleton, and performs several tests over the parser.
+m4_define([AT_CHECK_CALC_LALR1_CC],
+[AT_CHECK_CALC([%language "C++" %defines %locations] $@)])
+
+AT_CHECK_CALC_LALR1_CC([])
+AT_CHECK_CALC_LALR1_CC([%error-verbose %name-prefix "calc" %verbose %yacc])
+
+AT_CHECK_CALC_LALR1_CC([%error-verbose %debug %name-prefix "calc" %verbose %yacc])
+
+AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %name-prefix "calc" %verbose %yacc])
+
+AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+
+
+
+# --------------------------- #
+# Simple GLR C++ Calculator. #
+# --------------------------- #
+
+AT_BANNER([[Simple GLR C++ Calculator.]])
+
+# Again, we try also using %skeleton.
+AT_CHECK_CALC([%skeleton "glr.cc" %defines %locations])
+
+# AT_CHECK_CALC_GLR_CC([BISON-OPTIONS])
+# -------------------------------------
+# Start a testing chunk which compiles `calc' grammar with
+# the GLR C++ skeleton, and performs several tests over the parser.
+m4_define([AT_CHECK_CALC_GLR_CC],
+[AT_CHECK_CALC([%language "C++" %glr-parser %defines %locations] $@)])