%{
/* Yacc grammar for ANSI and C++ cdecl. */
/* The output of this file is included */
/* into the C file cdecl.c. */
char cdgramsccsid[] = "@(#)cdgram.y	2.2 3/30/88";
int yylex();
%}

%union {
	char *dynstr;
	struct {
		char *left;
		char *right;
		char *type;
	} halves;
}

%token ARRAY AS CAST COMMA DECLARE DOUBLECOLON EXPLAIN FUNCTION
%token HELP INTO OF MEMBER POINTER REFERENCE RETURNING SET TO
%token <dynstr> CHAR CLASS CONSTVOLATILE DOUBLE ENUM FLOAT INT LONG NAME
%token <dynstr> NUMBER SHORT SIGNED STRUCT UNION UNSIGNED VOID
%token <dynstr> AUTO EXTERN REGISTER STATIC
%type <dynstr> adecllist adims c_type cast castlist cdecl cdecl1 cdims
%type <dynstr> constvol_list ClassStruct mod_list mod_list1 modifier
%type <dynstr> opt_constvol_list optNAME opt_storage storage StrClaUniEnum
%type <dynstr> tname type
%type <halves> adecl

%start prog

%%
prog		: /* empty */
		| prog stmt
			{
			prompt();
			prev = 0;
			}
		;

stmt		: HELP NL
			{
			Debug((stderr, "stmt: help\n"));
			dohelp();
			}

		| DECLARE NAME AS opt_storage adecl NL
			{
			Debug((stderr, "stmt: DECLARE NAME AS opt_storage adecl\n"));
			Debug((stderr, "\tNAME='%s'\n", $2));
			Debug((stderr, "\topt_storage='%s'\n", $4));
			Debug((stderr, "\tacdecl.left='%s'\n", $5.left));
			Debug((stderr, "\tacdecl.right='%s'\n", $5.right));
			Debug((stderr, "\tacdecl.type='%s'\n", $5.type));
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			dodeclare($2, $4, $5.left, $5.right, $5.type);
			}

		| DECLARE opt_storage adecl NL
			{
			Debug((stderr, "stmt: DECLARE opt_storage adecl\n"));
			Debug((stderr, "\topt_storage='%s'\n", $2));
			Debug((stderr, "\tacdecl.left='%s'\n", $3.left));
			Debug((stderr, "\tacdecl.right='%s'\n", $3.right));
			Debug((stderr, "\tacdecl.type='%s'\n", $3.type));
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			dodeclare(NullCP, $2, $3.left, $3.right, $3.type);
			}

		| CAST NAME INTO adecl NL
			{
			Debug((stderr, "stmt: CAST NAME AS adecl\n"));
			Debug((stderr, "\tNAME='%s'\n", $2));
			Debug((stderr, "\tacdecl.left='%s'\n", $4.left));
			Debug((stderr, "\tacdecl.right='%s'\n", $4.right));
			Debug((stderr, "\tacdecl.type='%s'\n", $4.type));
			docast($2, $4.left, $4.right, $4.type);
			}

		| CAST adecl NL
			{
			Debug((stderr, "stmt: CAST adecl\n"));
			Debug((stderr, "\tacdecl.left='%s'\n", $2.left));
			Debug((stderr, "\tacdecl.right='%s'\n", $2.right));
			Debug((stderr, "\tacdecl.type='%s'\n", $2.type));
			docast(NullCP, $2.left, $2.right, $2.type);
			}

		| EXPLAIN opt_storage opt_constvol_list type cdecl NL
			{
			Debug((stderr, "stmt: EXPLAIN opt_storage opt_constvol_list type cdecl\n"));
			Debug((stderr, "\topt_storage='%s'\n", $2));
			Debug((stderr, "\topt_constvol_list='%s'\n", $3));
			Debug((stderr, "\ttype='%s'\n", $4));
			Debug((stderr, "\tcdecl='%s'\n", $5));
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			dodexplain($2, $3, $4, $5);
			}

		| EXPLAIN storage opt_constvol_list cdecl NL
			{
			Debug((stderr, "stmt: EXPLAIN storage opt_constvol_list cdecl\n"));
			Debug((stderr, "\tstorage='%s'\n", $2));
			Debug((stderr, "\topt_constvol_list='%s'\n", $3));
			Debug((stderr, "\tcdecl='%s'\n", $4));
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			dodexplain($2, $3, NullCP, $4);
			}

		| EXPLAIN opt_storage constvol_list cdecl NL
			{
			Debug((stderr, "stmt: EXPLAIN opt_storage constvol_list cdecl\n"));
			Debug((stderr, "\topt_storage='%s'\n", $2));
			Debug((stderr, "\tconstvol_list='%s'\n", $3));
			Debug((stderr, "\tcdecl='%s'\n", $4));
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			dodexplain($2, $3, NullCP, $4);
			}

		| EXPLAIN '(' opt_constvol_list type cast ')' optNAME NL
			{
			Debug((stderr, "stmt: EXPLAIN ( opt_constvol_list type cast ) optNAME\n"));
			Debug((stderr, "\topt_constvol_list='%s'\n", $3));
			Debug((stderr, "\ttype='%s'\n", $4));
			Debug((stderr, "\tcast='%s'\n", $5));
			Debug((stderr, "\tNAME='%s'\n", $7));
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			docexplain($3, $4, $5, $7);
			}

		| SET optNAME NL
			{
			Debug((stderr, "stmt: SET optNAME\n"));
			Debug((stderr, "\toptNAME='%s'\n", $2));
			doset($2);
			}

		| NL
		| error NL
			{
			yyerrok;
			}
		;

NL		: '\n'
			{
			doprompt();
			}
		| ';'
			{
			noprompt();
			}
		;

optNAME		: NAME
			{
			Debug((stderr, "optNAME: NAME\n"));
			Debug((stderr, "\tNAME='%s'\n", $1));
			$$ = $1;
			}

		| /* empty */
			{
			Debug((stderr, "optNAME: EMPTY\n"));
			$$ = ds(unknown_name);
			}
		;

cdecl		: cdecl1
		| '*' opt_constvol_list cdecl
			{
			Debug((stderr, "cdecl: * opt_constvol_list cdecl\n"));
			Debug((stderr, "\topt_constvol_list='%s'\n", $2));
			Debug((stderr, "\tcdecl='%s'\n", $3));
			$$ = cat($3,$2,ds(strlen($2)?" pointer to ":"pointer to "),NullCP);
			prev = 'p';
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| NAME DOUBLECOLON '*' cdecl
			{
			Debug((stderr, "cdecl: NAME DOUBLECOLON '*' cdecl\n"));
			Debug((stderr, "\tNAME='%s'\n", $1));
			Debug((stderr, "\tcdecl='%s'\n", $4));
			if (!CplusplusFlag)
				unsupp("pointer to member of class", NullCP);
			$$ = cat($4,ds("pointer to member of class "),$1,ds(" "),NullCP);
			prev = 'p';
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| '&' opt_constvol_list cdecl
			{
			Debug((stderr, "cdecl: & opt_constvol_list cdecl\n"));
			Debug((stderr, "\topt_constvol_list='%s'\n", $2));
			Debug((stderr, "\tcdecl='%s'\n", $3));
			if (!CplusplusFlag)
				unsupp("reference", NullCP);
			$$ = cat($3,$2,ds(strlen($2)?" reference to ":"reference to "),NullCP);
			prev = 'r';
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}
		;

cdecl1		: cdecl1 '(' ')'
			{
			Debug((stderr, "cdecl1: cdecl1()\n"));
			Debug((stderr, "\tcdecl1='%s'\n", $1));
			$$ = cat($1,ds("function returning "),NullCP);
			prev = 'f';
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| cdecl1 '(' castlist ')'
			{
			Debug((stderr, "cdecl1: cdecl1(castlist)\n"));
			Debug((stderr, "\tcdecl1='%s'\n", $1));
			Debug((stderr, "\tcastlist='%s'\n", $3));
			$$ = cat($1, ds("function ("),
				  $3, ds(") returning "), NullCP);
			prev = 'f';
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| cdecl1 cdims
			{
			Debug((stderr, "cdecl1: cdecl1 cdims\n"));
			Debug((stderr, "\tcdecl1='%s'\n", $1));
			Debug((stderr, "\tcdims='%s'\n", $2));
			$$ = cat($1,ds("array "),$2,NullCP);
			prev = 'a';
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| '(' cdecl ')'
			{
			Debug((stderr, "cdecl1: (cdecl)\n"));
			Debug((stderr, "\tcdecl='%s'\n", $2));
			$$ = $2;
			/* prev = prev; */
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| NAME
			{
			Debug((stderr, "cdecl1: NAME\n"));
			Debug((stderr, "\tNAME='%s'\n", $1));
			savedname = $1;
			$$ = ds("");
			prev = 'n';
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}
		;

castlist	: castlist COMMA castlist
			{
			Debug((stderr, "castlist: castlist1, castlist2\n"));
			Debug((stderr, "\tcastlist1='%s'\n", $1));
			Debug((stderr, "\tcastlist2='%s'\n", $3));
			$$ = cat($1, ds(", "), $3, NullCP);
			}

		| opt_constvol_list type cast
			{
			Debug((stderr, "castlist: opt_constvol_list type cast\n"));
			Debug((stderr, "\topt_constvol_list='%s'\n", $1));
			Debug((stderr, "\ttype='%s'\n", $2));
			Debug((stderr, "\tcast='%s'\n", $3));
			$$ = cat($3, $1, ds(strlen($1) ? " " : ""), $2, NullCP);
			}

		| NAME
			{
			$$ = $1;
			}
		;

adecllist	: /* empty */
			{
			Debug((stderr, "adecllist: EMPTY\n"));
			$$ = ds("");
			}

		| adecllist COMMA adecllist
			{
			Debug((stderr, "adecllist: adecllist1, adecllist2\n"));
			Debug((stderr, "\tadecllist1='%s'\n", $1));
			Debug((stderr, "\tadecllist2='%s'\n", $3));
			$$ = cat($1, ds(", "), $3, NullCP);
			}

		| NAME
			{
			Debug((stderr, "adecllist: NAME\n"));
			Debug((stderr, "\tNAME='%s'\n", $1));
			$$ = $1;
			}

		| adecl
			{
			Debug((stderr, "adecllist: adecl\n"));
			Debug((stderr, "\tadecl.left='%s'\n", $1.left));
			Debug((stderr, "\tadecl.right='%s'\n", $1.right));
			Debug((stderr, "\tadecl.type='%s'\n", $1.type));
			$$ = cat($1.type, ds(" "), $1.left, $1.right, NullCP);
			}

		| NAME AS adecl
			{
			Debug((stderr, "adecllist: NAME AS adecl\n"));
			Debug((stderr, "\tNAME='%s'\n", $1));
			Debug((stderr, "\tadecl.left='%s'\n", $3.left));
			Debug((stderr, "\tadecl.right='%s'\n", $3.right));
			Debug((stderr, "\tadecl.type='%s'\n", $3.type));
			$$ = cat($3.type, ds(" "), $3.left, $1, $3.right, NullCP);
			}
		;

cast		: /* empty */
			{
			Debug((stderr, "cast: EMPTY\n"));
			$$ = ds("");
			/* prev = prev; */
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| '(' ')'
			{
			Debug((stderr, "cast: ()\n"));
			$$ = ds("function returning ");
			prev = 'f';
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| '(' cast ')' '(' ')'
			{
			Debug((stderr, "cast: (cast)()\n"));
			Debug((stderr, "\tcast='%s'\n", $2));
			$$ = cat($2,ds("function returning "),NullCP);
			prev = 'f';
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| '(' cast ')' '(' castlist ')'
			{
			Debug((stderr, "cast: (cast)(castlist)\n"));
			Debug((stderr, "\tcast='%s'\n", $2));
			Debug((stderr, "\tcastlist='%s'\n", $5));
			$$ = cat($2,ds("function ("),$5,ds(") returning "),NullCP);
			prev = 'f';
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| '(' cast ')'
			{
			Debug((stderr, "cast: (cast)\n"));
			Debug((stderr, "\tcast='%s'\n", $2));
			$$ = $2;
			/* prev = prev; */
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| NAME DOUBLECOLON '*' cast
			{
			Debug((stderr, "cast: NAME::*cast\n"));
			Debug((stderr, "\tcast='%s'\n", $4));
			if (!CplusplusFlag)
				unsupp("pointer to member of class", NullCP);
			$$ = cat($4,ds("pointer to member of class "),$1,ds(" "),NullCP);
			prev = 'p';
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| '*' cast
			{
			Debug((stderr, "cast: *cast\n"));
			Debug((stderr, "\tcast='%s'\n", $2));
			$$ = cat($2,ds("pointer to "),NullCP);
			prev = 'p';
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| '&' cast
			{
			Debug((stderr, "cast: &cast\n"));
			Debug((stderr, "\tcast='%s'\n", $2));
			if (!CplusplusFlag)
				unsupp("reference", NullCP);
			$$ = cat($2,ds("reference to "),NullCP);
			prev = 'r';
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| cast cdims
			{
			Debug((stderr, "cast: cast cdims\n"));
			Debug((stderr, "\tcast='%s'\n", $1));
			Debug((stderr, "\tcdims='%s'\n", $2));
			$$ = cat($1,ds("array "),$2,NullCP);
			prev = 'a';
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}
		;

cdims		: '[' ']'
			{
			Debug((stderr, "cdims: []\n"));
			$$ = ds("of ");
			}

		| '[' NUMBER ']'
			{
			Debug((stderr, "cdims: [NUMBER]\n"));
			Debug((stderr, "\tNUMBER='%s'\n", $2));
			$$ = cat($2,ds(" of "),NullCP);
			}
		;

adecl		: FUNCTION RETURNING adecl
			{
			Debug((stderr, "adecl: FUNCTION RETURNING adecl\n"));
			Debug((stderr, "\tadecl.left='%s'\n", $3.left));
			Debug((stderr, "\tadecl.right='%s'\n", $3.right));
			Debug((stderr, "\tadecl.type='%s'\n", $3.type));
			if (prev == 'f')
				unsupp("Function returning function",
				       "function returning pointer to function");
			else if (prev=='A' || prev=='a')
				unsupp("Function returning array",
				       "function returning pointer");
			$$.left = $3.left;
			$$.right = cat(ds("()"),$3.right,NullCP);
			$$.type = $3.type;
			prev = 'f';
			Debug((stderr, "\n\tadecl now =\n"));
			Debug((stderr, "\t\tadecl.left='%s'\n", $$.left));
			Debug((stderr, "\t\tadecl.right='%s'\n", $$.right));
			Debug((stderr, "\t\tadecl.type='%s'\n", $$.type));
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| FUNCTION '(' adecllist ')' RETURNING adecl
			{
			Debug((stderr, "adecl: FUNCTION (adecllist) RETURNING adecl\n"));
			Debug((stderr, "\tadecllist='%s'\n", $3));
			Debug((stderr, "\tadecl.left='%s'\n", $6.left));
			Debug((stderr, "\tadecl.right='%s'\n", $6.right));
			Debug((stderr, "\tadecl.type='%s'\n", $6.type));
			if (prev == 'f')
				unsupp("Function returning function",
				       "function returning pointer to function");
			else if (prev=='A' || prev=='a')
				unsupp("Function returning array",
				       "function returning pointer");
			$$.left = $6.left;
			$$.right = cat(ds("("),$3,ds(")"),$6.right,NullCP);
			$$.type = $6.type;
			prev = 'f';
			Debug((stderr, "\n\tadecl now =\n"));
			Debug((stderr, "\t\tadecl.left='%s'\n", $$.left));
			Debug((stderr, "\t\tadecl.right='%s'\n", $$.right));
			Debug((stderr, "\t\tadecl.type='%s'\n", $$.type));
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| ARRAY adims OF adecl
			{
			Debug((stderr, "adecl: ARRAY adims OF adecl\n"));
			Debug((stderr, "\tadims='%s'\n", $2));
			Debug((stderr, "\tadecl.left='%s'\n", $4.left));
			Debug((stderr, "\tadecl.right='%s'\n", $4.right));
			Debug((stderr, "\tadecl.type='%s'\n", $4.type));
			if (prev == 'f')
				unsupp("Array of function",
				       "array of pointer to function");
			else if (prev == 'a')
				unsupp("Inner array of unspecified size",
				       "array of pointer");
			else if (prev == 'v')
				unsupp("Array of void",
				       "pointer to void");
			if (arbdims)
				prev = 'a';
			else
				prev = 'A';
			$$.left = $4.left;
			$$.right = cat($2,$4.right,NullCP);
			$$.type = $4.type;
			Debug((stderr, "\n\tadecl now =\n"));
			Debug((stderr, "\t\tadecl.left='%s'\n", $$.left));
			Debug((stderr, "\t\tadecl.right='%s'\n", $$.right));
			Debug((stderr, "\t\tadecl.type='%s'\n", $$.type));
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| opt_constvol_list POINTER TO adecl
			{
			char *op = "", *cp = "", *sp = "";

			Debug((stderr, "adecl: opt_constvol_list POINTER TO adecl\n"));
			Debug((stderr, "\topt_constvol_list='%s'\n", $1));
			Debug((stderr, "\tadecl.left='%s'\n", $4.left));
			Debug((stderr, "\tadecl.right='%s'\n", $4.right));
			Debug((stderr, "\tadecl.type='%s'\n", $4.type));
			if (prev == 'a')
				unsupp("Pointer to array of unspecified dimension",
				       "pointer to object");
			if (prev=='a' || prev=='A' || prev=='f') {
				op = "(";
				cp = ")";
			}
			if (strlen($1) != 0)
				sp = " ";
			$$.left = cat($4.left,ds(op),ds("*"),
				       ds(sp),$1,ds(sp),NullCP);
			$$.right = cat(ds(cp),$4.right,NullCP);
			$$.type = $4.type;
			prev = 'p';
			Debug((stderr, "\n\tadecl now =\n"));
			Debug((stderr, "\t\tadecl.left='%s'\n", $$.left));
			Debug((stderr, "\t\tadecl.right='%s'\n", $$.right));
			Debug((stderr, "\t\tadecl.type='%s'\n", $$.type));
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| opt_constvol_list POINTER TO MEMBER OF ClassStruct NAME adecl
			{
			char *op = "", *cp = "", *sp = "";

			Debug((stderr, "adecl: opt_constvol_list POINTER TO MEMBER OF ClassStruct NAME adecl\n"));
			Debug((stderr, "\topt_constvol_list='%s'\n", $1));
			Debug((stderr, "\tClassStruct='%s'\n", $6));
			Debug((stderr, "\tNAME='%s'\n", $7));
			Debug((stderr, "\tadecl.left='%s'\n", $8.left));
			Debug((stderr, "\tadecl.right='%s'\n", $8.right));
			Debug((stderr, "\tadecl.type='%s'\n", $8.type));
			if (!CplusplusFlag)
				unsupp("pointer to member of class", NullCP);
			if (prev == 'a')
				unsupp("Pointer to array of unspecified dimension",
				       "pointer to object");
			if (prev=='a' || prev=='A' || prev=='f') {
				op = "(";
				cp = ")";
			}
			if (strlen($1) != 0)
				sp = " ";
			$$.left = cat($8.left,ds(op),$7,ds("::*"),
				      ds(sp),$1,ds(sp),NullCP);
			$$.right = cat(ds(cp),$8.right,NullCP);
			$$.type = $8.type;
			prev = 'p';
			Debug((stderr, "\n\tadecl now =\n"));
			Debug((stderr, "\t\tadecl.left='%s'\n", $$.left));
			Debug((stderr, "\t\tadecl.right='%s'\n", $$.right));
			Debug((stderr, "\t\tadecl.type='%s'\n", $$.type));
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| opt_constvol_list REFERENCE TO adecl
			{
			char *op = "", *cp = "", *sp = "";

			Debug((stderr, "adecl: opt_constvol_list REFERENCE TO adecl\n"));
			Debug((stderr, "\topt_constvol_list='%s'\n", $1));
			Debug((stderr, "\tadecl.left='%s'\n", $4.left));
			Debug((stderr, "\tadecl.right='%s'\n", $4.right));
			Debug((stderr, "\tadecl.type='%s'\n", $4.type));
			if (!CplusplusFlag)
				unsupp("reference", NullCP);
			if (prev == 'v')
				unsupp("Reference to void",
				       "pointer to void");
			else if (prev == 'a')
				unsupp("Reference to array of unspecified dimension",
				       "reference to object");
			if (prev=='a' || prev=='A' || prev=='f') {
				op = "(";
				cp = ")";
			}
			if (strlen($1) != 0)
				sp = " ";
			$$.left = cat($4.left,ds(op),ds("&"),
				       ds(sp),$1,ds(sp),NullCP);
			$$.right = cat(ds(cp),$4.right,NullCP);
			$$.type = $4.type;
			prev = 'r';
			Debug((stderr, "\n\tadecl now =\n"));
			Debug((stderr, "\t\tadecl.left='%s'\n", $$.left));
			Debug((stderr, "\t\tadecl.right='%s'\n", $$.right));
			Debug((stderr, "\t\tadecl.type='%s'\n", $$.type));
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}

		| opt_constvol_list type
			{
			Debug((stderr, "adecl: opt_constvol_list type\n"));
			Debug((stderr, "\topt_constvol_list='%s'\n", $1));
			Debug((stderr, "\ttype='%s'\n", $2));
			$$.left = ds("");
			$$.right = ds("");
			if (strcmp($2, "void") == 0)
			    prev = 'v';
			else if ((strncmp($2, "struct", 6) == 0) ||
			         (strncmp($2, "class", 5) == 0))
			    prev = 's';
			else
			    prev = 't';
			$$.type = cat($1,ds(strlen($1)?" ":""),$2,NullCP);
			Debug((stderr, "\n\tadecl now =\n"));
			Debug((stderr, "\t\tadecl.left='%s'\n", $$.left));
			Debug((stderr, "\t\tadecl.right='%s'\n", $$.right));
			Debug((stderr, "\t\tadecl.type='%s'\n", $$.type));
			Debug((stderr, "\tprev = '%s'\n", visible(prev)));
			}
		;

adims		: /* empty */
			{
			Debug((stderr, "adims: EMPTY\n"));
			arbdims = 1;
			$$ = ds("[]");
			}

		| NUMBER
			{
			Debug((stderr, "adims: NUMBER\n"));
			Debug((stderr, "\tNUMBER='%s'\n", $1));
			arbdims = 0;
			$$ = cat(ds("["),$1,ds("]"),NullCP);
			}
		;

type		: tinit c_type
			{
			Debug((stderr, "type: tinit c_type\n"));
			Debug((stderr, "\ttinit=''\n"));
			Debug((stderr, "\tc_type='%s'\n", $2));
			mbcheck();
			$$ = $2;
			}
		;

tinit		: /* empty */
			{
			Debug((stderr, "tinit: EMPTY\n"));
			modbits = 0;
			}
		;

c_type		: mod_list
			{
			Debug((stderr, "c_type: mod_list\n"));
			Debug((stderr, "\tmod_list='%s'\n", $1));
			$$ = $1;
			}

		| tname
			{
			Debug((stderr, "c_type: tname\n"));
			Debug((stderr, "\ttname='%s'\n", $1));
			$$ = $1;
			}

		| mod_list tname
			{
			Debug((stderr, "c_type: mod_list tname\n"));
			Debug((stderr, "\tmod_list='%s'\n", $1));
			Debug((stderr, "\ttname='%s'\n", $2));
			$$ = cat($1,ds(" "),$2,NullCP);
			}

		| StrClaUniEnum NAME
			{
			Debug((stderr, "c_type: StrClaUniEnum NAME\n"));
			Debug((stderr, "\tStrClaUniEnum='%s'\n", $1));
			Debug((stderr, "\tNAME='%s'\n", $2));
			$$ = cat($1,ds(" "),$2,NullCP);
			}
		;

StrClaUniEnum	: ClassStruct
		| ENUM
		| UNION
			{
			$$ = $1;
			}
		;

ClassStruct	: STRUCT
		| CLASS
			{
			$$ = $1;
			}
		;

tname		: INT
			{
			Debug((stderr, "tname: INT\n"));
			Debug((stderr, "\tINT='%s'\n", $1));
			modbits |= MB_INT; $$ = $1;
			}

		| CHAR
			{
			Debug((stderr, "tname: CHAR\n"));
			Debug((stderr, "\tCHAR='%s'\n", $1));
			modbits |= MB_CHAR; $$ = $1;
			}

		| FLOAT
			{
			Debug((stderr, "tname: FLOAT\n"));
			Debug((stderr, "\tFLOAT='%s'\n", $1));
			modbits |= MB_FLOAT; $$ = $1;
			}

		| DOUBLE
			{
			Debug((stderr, "tname: DOUBLE\n"));
			Debug((stderr, "\tDOUBLE='%s'\n", $1));
			modbits |= MB_DOUBLE; $$ = $1;
			}

		| VOID
			{
			Debug((stderr, "tname: VOID\n"));
			Debug((stderr, "\tVOID='%s'\n", $1));
			modbits |= MB_VOID; $$ = $1;
			}
		;

mod_list	: modifier mod_list1
			{
			Debug((stderr, "mod_list: modifier mod_list1\n"));
			Debug((stderr, "\tmodifier='%s'\n", $1));
			Debug((stderr, "\tmod_list1='%s'\n", $2));
			$$ = cat($1,ds(" "),$2,NullCP);
			}

		| modifier
			{
			Debug((stderr, "mod_list: modifier\n"));
			Debug((stderr, "\tmodifier='%s'\n", $1));
			$$ = $1;
			}
		;

mod_list1	: mod_list
			{
			Debug((stderr, "mod_list1: mod_list\n"));
			Debug((stderr, "\tmod_list='%s'\n", $1));
			$$ = $1;
			}

		| CONSTVOLATILE
			{
			Debug((stderr, "mod_list1: CONSTVOLATILE\n"));
			Debug((stderr, "\tCONSTVOLATILE='%s'\n", $1));
			if (PreANSIFlag)
				notsupported(" (Pre-ANSI Compiler)", $1, NullCP);
			else if (RitchieFlag)
				notsupported(" (Ritchie Compiler)", $1, NullCP);
			else if ((strcmp($1, "noalias") == 0) && CplusplusFlag)
				unsupp($1, NullCP);
			$$ = $1;
			}
		;

modifier	: UNSIGNED
			{
			Debug((stderr, "modifier: UNSIGNED\n"));
			Debug((stderr, "\tUNSIGNED='%s'\n", $1));
			modbits |= MB_UNSIGNED; $$ = $1;
			}

		| SIGNED
			{
			Debug((stderr, "modifier: SIGNED\n"));
			Debug((stderr, "\tSIGNED='%s'\n", $1));
			modbits |= MB_SIGNED; $$ = $1;
			}

		| LONG
			{
			Debug((stderr, "modifier: LONG\n"));
			Debug((stderr, "\tLONG='%s'\n", $1));
			modbits |= MB_LONG; $$ = $1;
			}

		| SHORT
			{
			Debug((stderr, "modifier: SHORT\n"));
			Debug((stderr, "\tSHORT='%s'\n", $1));
			modbits |= MB_SHORT; $$ = $1;
			}
		;

opt_constvol_list: CONSTVOLATILE opt_constvol_list
			{
			Debug((stderr, "opt_constvol_list: CONSTVOLATILE opt_constvol_list\n"));
			Debug((stderr, "\tCONSTVOLATILE='%s'\n", $1));
			Debug((stderr, "\topt_constvol_list='%s'\n", $2));
			if (PreANSIFlag)
				notsupported(" (Pre-ANSI Compiler)", $1, NullCP);
			else if (RitchieFlag)
				notsupported(" (Ritchie Compiler)", $1, NullCP);
			else if ((strcmp($1, "noalias") == 0) && CplusplusFlag)
				unsupp($1, NullCP);
			$$ = cat($1,ds(strlen($2) ? " " : ""),$2,NullCP);
			}

		| /* empty */
			{
			Debug((stderr, "opt_constvol_list: EMPTY\n"));
			$$ = ds("");
			}
		;

constvol_list: CONSTVOLATILE opt_constvol_list
			{
			Debug((stderr, "constvol_list: CONSTVOLATILE opt_constvol_list\n"));
			Debug((stderr, "\tCONSTVOLATILE='%s'\n", $1));
			Debug((stderr, "\topt_constvol_list='%s'\n", $2));
			if (PreANSIFlag)
				notsupported(" (Pre-ANSI Compiler)", $1, NullCP);
			else if (RitchieFlag)
				notsupported(" (Ritchie Compiler)", $1, NullCP);
			else if ((strcmp($1, "noalias") == 0) && CplusplusFlag)
				unsupp($1, NullCP);
			$$ = cat($1,ds(strlen($2) ? " " : ""),$2,NullCP);
			}
		;

storage		: AUTO
		| EXTERN
		| REGISTER
		| STATIC
			{
			Debug((stderr, "storage: AUTO,EXTERN,STATIC,REGISTER (%s)\n", $1));
			$$ = $1;
			}
		;

opt_storage	: storage
			{
			Debug((stderr, "opt_storage: storage=%s\n", $1));
			$$ = $1;
			}

		| /* empty */
			{
			Debug((stderr, "opt_storage: EMPTY\n"));
			$$ = ds("");
			}
		;
%%
