aboutsummaryrefslogtreecommitdiffstats
path: root/cparser/pre_parser.mly
diff options
context:
space:
mode:
authorFrançois Pottier <francois.pottier@inria.fr>2015-10-08 10:16:25 +0200
committerFrançois Pottier <francois.pottier@inria.fr>2015-10-23 12:51:48 +0200
commitd7d088921bcd26012bd27e5cc4f01746f91d029b (patch)
treeefdce070bad6bc7da5ff3b1e4f13e0a9edb1be0f /cparser/pre_parser.mly
parentca5594ace000eebab2e89791aa42cb849fad1a16 (diff)
downloadcompcert-kvx-d7d088921bcd26012bd27e5cc4f01746f91d029b.tar.gz
compcert-kvx-d7d088921bcd26012bd27e5cc4f01746f91d029b.zip
Replaced [declaration_specifiers_no_typedef_name] with [declaration_specifier_no_typedef_name*].
This replaces a right-recursive list with a left-recursive list. This saves 2 states and 6 error states.
Diffstat (limited to 'cparser/pre_parser.mly')
-rw-r--r--cparser/pre_parser.mly10
1 files changed, 3 insertions, 7 deletions
diff --git a/cparser/pre_parser.mly b/cparser/pre_parser.mly
index f25dde4f..f077a30c 100644
--- a/cparser/pre_parser.mly
+++ b/cparser/pre_parser.mly
@@ -388,10 +388,6 @@ declaration_specifier_no_typedef_name:
| type_specifier_no_typedef_name
{}
-declaration_specifiers_no_typedef_name:
- declaration_specifier_no_typedef_name declaration_specifiers_no_typedef_name?
- {}
-
(* [declaration_specifiers_no_type] matches declaration_specifiers
that do not contains "typedef". Moreover, it makes sure that it
contains either one typename and not other type specifier or no
@@ -414,7 +410,7 @@ declaration_specifiers_no_typedef_name:
parameter declaration. *)
declaration_specifiers(phantom):
| ilist(declaration_specifier_no_type) TYPEDEF_NAME declaration_specifier_no_type*
-| declaration_specifier_no_type* type_specifier_no_typedef_name declaration_specifiers_no_typedef_name?
+| declaration_specifier_no_type* type_specifier_no_typedef_name declaration_specifier_no_typedef_name*
{}
(* This matches declaration_specifiers that do contains once the
@@ -423,8 +419,8 @@ declaration_specifiers(phantom):
declaration_specifiers_typedef:
| declaration_specifier_no_type* TYPEDEF declaration_specifier_no_type* TYPEDEF_NAME declaration_specifier_no_type*
| ilist(declaration_specifier_no_type) TYPEDEF_NAME declaration_specifier_no_type* TYPEDEF declaration_specifier_no_type*
-| declaration_specifier_no_type* TYPEDEF declaration_specifier_no_type* type_specifier_no_typedef_name declaration_specifiers_no_typedef_name?
-| declaration_specifier_no_type* type_specifier_no_typedef_name declaration_specifiers_no_typedef_name? TYPEDEF declaration_specifiers_no_typedef_name?
+| declaration_specifier_no_type* TYPEDEF declaration_specifier_no_type* type_specifier_no_typedef_name declaration_specifier_no_typedef_name*
+| declaration_specifier_no_type* type_specifier_no_typedef_name declaration_specifier_no_typedef_name* TYPEDEF declaration_specifier_no_typedef_name*
{}
(* A type specifier which is not a typedef name. *)