diff options
author | François Pottier <francois.pottier@inria.fr> | 2015-10-08 10:16:25 +0200 |
---|---|---|
committer | François Pottier <francois.pottier@inria.fr> | 2015-10-23 12:51:48 +0200 |
commit | d7d088921bcd26012bd27e5cc4f01746f91d029b (patch) | |
tree | efdce070bad6bc7da5ff3b1e4f13e0a9edb1be0f | |
parent | ca5594ace000eebab2e89791aa42cb849fad1a16 (diff) | |
download | compcert-d7d088921bcd26012bd27e5cc4f01746f91d029b.tar.gz compcert-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.
-rw-r--r-- | cparser/pre_parser.mly | 10 |
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. *) |