 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Alan M. Feldstein Guest
|
Posted: Thu Oct 19, 2006 2:23 am Post subject: type-specifier |
|
|
I'm having trouble understanding how the following code maps to the
syntax specified in ISO/IEC 14882:2003.
typedef union {
..
struct str_pair_t drive;
..
} yystype;
(The ellipses respresent suppression of detail superfluous to this
discussion.)
This is in the form
typedef type-specifier yystype;
and I'm having no problem with that part.
Therefore,
union {
..
struct str_pair_t drive;
..
}
is a type-specifier, specifically a class-specifier.
From Clause 9,
class-specifier:
class-head { member-specification_opt }
Therefore,
..
struct str_pair_t drive;
..
is a member-specification.
We match Clause 9.2 as follows
member-specification:
member-declaration member-specification_opt
and can conclude that
struct str_pair_t drive;
is a member-declaration.
It is obvious to me that this is not a function-definition,
using-declaration, or template-declaration. The following possible
matches remain:
member-declaration:
decl-specifier-seq_opt member-declarator-list_opt ;
::_opt nested-name-specifier template_opt unqualified-id ;
A nested-name-specifier must have "::" in it (Clause 5), so we conclude that
struct str_pair_t drive;
must match
decl-specifier-seq_opt member-declarator-list_opt ;
There is no comma in the statement, so the optional
member-declarator-list might be (9.2)
member-declarator-list:
member-declarator
Here, the only possible matches are
member-declarator:
declarator pure-specifier_opt
declarator constant-initializer_opt
which are both the same in this case: declarator.
From Clause 8, the only possible match is
declarator:
direct-declarator
and
direct-declarator:
declarator-id
and
declarator-id:
id-expression
::_opt nested-name-specifier_opt type-name
From Clause 5.1,
id-expression:
unqualified-id
qualified-id
and we have a match on
unqualified-id:
identifier
Therefore,
struct str_pair_t drive;
matches
decl-specifier-seq_ identifier ;
where drive is the identifier.
From Clause 7.1,
decl-specifier-seq:
decl-specifier-seq_opt decl-specifier
and
decl-specifier:
storage-class-specifier
*type-specifier*
function-specifier
friend
typedef
I expect
struct str_pair
to be a type-specifier, but I don't see how it matches that.
--
Alan Feldstein
Cosmic Horizon logo
http://www.alanfeldstein.com/
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ] |
|
| Back to top |
|
 |
Greg Herlihy Guest
|
Posted: Thu Oct 19, 2006 2:48 am Post subject: Re: type-specifier |
|
|
"Alan M. Feldstein" wrote:
| Quote: | I'm having trouble understanding how the following code maps to the
syntax specified in ISO/IEC 14882:2003.
typedef union {
.
struct str_pair_t drive;
.
} yystype;
(The ellipses respresent suppression of detail superfluous to this
discussion.)
This is in the form
typedef type-specifier yystype;
and I'm having no problem with that part.
....
I expect
struct str_pair
to be a type-specifier, but I don't see how it matches that.
|
The presence of the "struct" keyword (usually present for C
compatibility) means that the type-specifier has to be reduced to an
elaborated-type-specifier. An elaborated-type-specifier has the
following syntax:
class-key ::_opt nested-name-specifier_opt identifier
Since the middle two terms are optional, "struct str_pair" matches:
class-key identifier
Greg
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ] |
|
| Back to top |
|
 |
Alberto Ganesh Barbati Guest
|
Posted: Thu Oct 19, 2006 5:45 am Post subject: Re: type-specifier |
|
|
Alan M. Feldstein ha scritto:
| Quote: |
I expect
struct str_pair
to be a type-specifier, but I don't see how it matches that.
|
§7.1.5.3/1
elaborated-type-specifier:
class-key ::opt nested-name-specifier opt identifier
class-key ::opt nested-name-specifier opt template opt template-id
enum ::opt nested-name-specifier opt identifier
typename ::opt nested-name-specifier identifier
typename ::opt nested-name-specifier template opt template-id
So "struct str_pair" is an elaborated-type-specifier, matching the first
production rule with class-key == "struct" (see §9/1) and identifier ==
"str_pair" (see 2.10/1).
§7.1.5/1
type-specifier:
simple-type-specifier
class-specifier
enum-specifier
elaborated-type-specifier
cv-qualifier
So "struct str_pair" is a type-specifier, matching the fourth production
rule.
HTH,
Ganesh
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ] |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|