X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/0245f82d315e27c2439482d8b3f15af74d5dd508..fc049e9cafa1322aa5cb1d7d64ad61ab2a41dd59:/data/c.m4 diff --git a/data/c.m4 b/data/c.m4 index b513df56..209bb1a7 100644 --- a/data/c.m4 +++ b/data/c.m4 @@ -19,14 +19,14 @@ m4_divert(-1) -*- Autoconf -*- # 02111-1307 USA -## ----------- ## -## Copyright. ## -## ----------- ## +## ---------------- ## +## Identification. ## +## ---------------- ## # b4_copyright(TITLE, YEARS) # -------------------------- m4_define([b4_copyright], -[/* A Bison parser, made from b4_filename, by GNU bison b4_version. */ +[/* A Bison parser, made by GNU Bison b4_version. */ /* $1, Copyright (C) $2 Free Software Foundation, Inc. @@ -47,6 +47,53 @@ m4_define([b4_copyright], Boston, MA 02111-1307, USA. */]) +# b4_identification +# ----------------- +m4_define([b4_identification], +[/* Identify Bison output. */ +[#]define YYBISON 1 + +/* Skeleton name. */ +[#]define YYSKELETON_NAME b4_skeleton + +/* Pure parsers. */ +[#]define YYPURE b4_pure + +/* Using locations. */ +[#]define YYLSP_NEEDED b4_locations_flag +]) + + + +## ---------------- ## +## Default values. ## +## ---------------- ## + +m4_define_default([b4_epilogue], []) + + + +## ------------------------ ## +## Pure/impure interfaces. ## +## ------------------------ ## + + +# b4_user_args +# ------------ +m4_define([b4_user_args], +[m4_ifset([b4_parse_param], [, b4_c_args(b4_parse_param)])]) + + +# b4_parse_param +# -------------- +# If defined, b4_parse_param arrives double quoted, but below we prefer +# it to be single quoted. +m4_define_default([b4_parse_param]) +m4_define([b4_parse_param], +b4_parse_param)) + + + ## ------------ ## ## Data Types. ## ## ------------ ## @@ -65,7 +112,7 @@ m4_define([b4_ints_in], # MIN to MAX (included). m4_define([b4_int_type], [m4_if(b4_ints_in($@, [0], [255]), [1], [unsigned char], - b4_ints_in($@, [-128], [127]), [1], [yysigned_char], + b4_ints_in($@, [-128], [127]), [1], [signed char], b4_ints_in($@, [0], [65535]), [1], [unsigned short], b4_ints_in($@, [-32768], [32767]), [1], [short], @@ -74,6 +121,7 @@ m4_define([b4_int_type], [int])]) + # b4_int_type_for(NAME) # --------------------- # Return the smallest int type able to handle numbers ranging from @@ -260,3 +308,105 @@ m4_define([b4_c_args], m4_define([b4_c_arg], [$2]) + + +## ----------- ## +## Synclines. ## +## ----------- ## + + +# b4_syncline(LINE, FILE) +# ----------------------- +m4_define([b4_syncline], +[m4_if(b4_synclines_flag, 1, + [[#]line $1 $2])]) + + +# b4_symbol_actions(FILENAME, LINENO, +# SYMBOL-TAG, SYMBOL-NUM, +# SYMBOL-ACTION, SYMBOL-TYPENAME) +# ------------------------------------------------- +m4_define([b4_symbol_actions], +[m4_pushdef([b4_dollar_dollar], [yyvaluep->$6])dnl +m4_pushdef([b4_at_dollar], [(*yylocationp)])dnl + case $4: /* $3 */ +b4_syncline([$2], [$1]) + $5; +b4_syncline([@oline@], [@ofile@]) + break; +m4_popdef([b4_at_dollar])dnl +m4_popdef([b4_dollar_dollar])dnl +]) + + +# b4_yydestruct_generate(FUNCTION-DECLARATOR) +# ------------------------------------------- +# Generate the "yydestruct" function, which declaration is issued using +# FUNCTION-DECLARATOR, which may be "b4_c_ansi_function_def" for ISO C +# or "b4_c_function_def" for K&R. +m4_define([b4_yydestruct_generate], +[[/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +]$1([yydestruct], + [static void], + [[int yytype], [yytype]], + [[YYSTYPE *yyvaluep], [yyvaluep]]b4_location_if([, + [[YYLTYPE *yylocationp], [yylocationp]]]))[ +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; +]b4_location_if([ (void) yylocationp; +])[ + switch (yytype) + { +]m4_map([b4_symbol_actions], m4_defn([b4_symbol_destructors]))[ + default: + break; + } +}]dnl +]) + + +# b4_yysymprint_generate(FUNCTION-DECLARATOR) +# ------------------------------------------- +# Generate the "yysymprint" function, which declaration is issued using +# FUNCTION-DECLARATOR, which may be "b4_c_ansi_function_def" for ISO C +# or "b4_c_function_def" for K&R. +m4_define([b4_yysymprint_generate], +[[/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +]$1([yysymprint], + [static void], + [[FILE *yyoutput], [yyoutput]], + [[int yytype], [yytype]], + [[YYSTYPE *yyvaluep], [yyvaluep]]b4_location_if([, + [[YYLTYPE *yylocationp], [yylocationp]]])) +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; +b4_location_if([ (void) yylocationp; +])dnl + + if (yytype < YYNTOKENS) + { + YYFPRINTF (yyoutput, "token %s (", yytname[[yytype]]); +# ifdef YYPRINT + YYPRINT (yyoutput, yytoknum[[yytype]], *yyvaluep); +# endif + } + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[[yytype]]); + + switch (yytype) + { +m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl + default: + break; + } + YYFPRINTF (yyoutput, ")"); +} +])