From: Nick Bowler Date: Thu, 20 Jul 2023 01:25:09 +0000 (-0400) Subject: libcdecl: Combine tag/typedef identifier rules. X-Git-Tag: v1.3~106 X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/commitdiff_plain/a8753bb69c0455ae59fd258aad988e9613f76330 libcdecl: Combine tag/typedef identifier rules. There are actually no conflicts to add an empty production alongside the rule for "struct", "union" and "enum", which allows the subsequent reductions for "tag identifier" and "[nothing] identifier" to be done with just one rule. This replaces a relatively large action from the eliminated rule with a very simple one. --- diff --git a/src/parse.y b/src/parse.y index 1542c09..a993ea6 100644 --- a/src/parse.y +++ b/src/parse.y @@ -343,7 +343,7 @@ typespec_simple: T_VOID | T_COMPLEX | T_IMAGINARY -typespec_tagged: T_STRUCT | T_UNION | T_ENUM +typespec_tagged: T_STRUCT | T_UNION | T_ENUM | { $$ = CDECL_TYPE_IDENT; } qualifier_simple: T_CONST | T_RESTRICT @@ -365,10 +365,6 @@ typespec: typespec_noid | typespec_tagged T_IDENT { ALLOC_STRUCT($$, struct cdecl_declspec, .type = $1, .ident = $2); -} | T_IDENT { - ALLOC_STRUCT($$, struct cdecl_declspec, - .type = CDECL_TYPE_IDENT, - .ident = $1); } declspec_noid: declspec_notype | typespec_noid