Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
302 lines (302 sloc) 13.8 KB
A.3 Basic concepts
translation-unit: declaration-seqopt
A.4 Expressions
primary-expression: literal this
( expression )
id-expression id-expression:
unqualified-id
qualified-id unqualified-id:
identifier operator-function-id conversion-function-id ∼ class-name template-id
qualified-id: ::opt nested-name-specifier templateopt unqualified-id :: identifier :: operator-function-id :: template-id
nested-name-specifier: type-name ::
namespace-name :: nested-name-specifier identifier :: nested-name-specifier templateopt simple-template-id ::
Draft
Grammar summary 1092
[gram.basic]
[gram.expr]
1093
Grammar summary
postfix-expression: primary-expression
postfix-expression [ expression ] postfix-expression ( expression-listopt ) simple-type-specifier ( expression-listopt ) typename-specifier ( expression-listopt ) postfix-expression . templateopt id-expression postfix-expression -> templateopt id-expression postfix-expression . pseudo-destructor-name postfix-expression -> pseudo-destructor-name postfix-expression ++
postfix-expression -- dynamic_cast < type-id > ( expression ) static_cast < type-id > ( expression ) reinterpret_cast < type-id > ( expression ) const_cast < type-id > ( expression ) typeid ( expression ) typeid ( type-id )
expression-list: assignment-expression ...opt expression-list , assignment-expression ...opt
pseudo-destructor-name: ::opt nested-name-specifieropt type-name :: ∼ type-name ::opt nested-name-specifier template simple-template-id :: ∼ type-name ::opt nested-name-specifieropt ∼ type-name
unary-expression: postfix-expression
++ cast-expression -- cast-expression unary-operator cast-expression sizeof unary-expression sizeof ( type-id ) sizeof ... ( identifier ) alignof ( type-id ) new-expression delete-expression
unary-operator: one of *&+-!∼
new-expression: ::opt new new-placementopt new-type-id new-initializeropt ::opt new new-placementopt ( type-id ) new-initializeropt
A.4 Expressions
new-placement: ( expression-list )
new-type-id: type-specifier-seq new-declaratoropt
Draft
A.4 Expressions
new-declarator: ptr-operator new-declaratoropt direct-new-declarator
direct-new-declarator: [ expression ]
direct-new-declarator [ constant-expression ] new-initializer:
( expression-listopt )
delete-expression: ::opt delete cast-expression ::opt delete [ ] cast-expression
cast-expression: unary-expression
( type-id ) cast-expression
pm-expression: cast-expression
pm-expression .* cast-expression pm-expression ->* cast-expression
multiplicative-expression: pm-expression
multiplicative-expression * pm-expression multiplicative-expression / pm-expression multiplicative-expression % pm-expression
additive-expression: multiplicative-expression
additive-expression + multiplicative-expression additive-expression - multiplicative-expression
shift-expression: additive-expression
shift-expression << additive-expression shift-expression >> additive-expression
relational-expression: shift-expression
relational-expression < shift-expression relational-expression > shift-expression relational-expression <= shift-expression relational-expression >= shift-expression
equality-expression: relational-expression
equality-expression == relational-expression equality-expression != relational-expression
Grammar summary 1094
Draft
1095
Grammar summary
and-expression: equality-expression
and-expression & equality-expression
exclusive-or-expression: and-expression
exclusive-or-expression ^ and-expression
inclusive-or-expression: exclusive-or-expression
inclusive-or-expression | exclusive-or-expression
logical-and-expression: inclusive-or-expression
logical-and-expression && inclusive-or-expression
logical-or-expression: logical-and-expression
logical-or-expression || logical-and-expression
conditional-expression: logical-or-expression
logical-or-expression ? expression : assignment-expression
assignment-expression: conditional-expression
logical-or-expression assignment-operator assignment-expression throw-expression
A.5 Statements
[gram.stmt]
assignment-operator: one of = *= /= %= += -= >>= <<= &= ^= |=
expression: assignment-expression
expression , assignment-expression constant-expression:
conditional-expression
A.5 Statements
statement: labeled-statement
expression-statement compound-statement selection-statement iteration-statement jump-statement declaration-statement try-block
labeled-statement: identifier : statement
case constant-expression : statement
default : statement
expression-statement: expressionopt ;
Draft
A.6 Declarations
compound-statement: { statement-seqopt }
statement-seq: statement
statement-seq statement
selection-statement: if ( condition ) statement
if ( condition ) statement else statement switch ( condition ) statement
condition: expression
type-specifier-seq declarator = assignment-expression
iteration-statement: while ( condition ) statement do statement while ( expression ) ; for ( for-init-statement conditionopt ; expressionopt ) statement
Grammar summary 1096
[gram.dcl]
for-init-statement: expression-statement
simple-declaration
jump-statement:
break ; continue ; return expressionopt ; goto identifier ;
declaration-statement: block-declaration
A.6 Declarations
declaration-seq: declaration
declaration-seq declaration
declaration: block-declaration
function-definition template-declaration explicit-instantiation explicit-specialization linkage-specification namespace-definition
Draft
1097
Grammar summary
block-declaration: simple-declaration
asm-definition namespace-alias-definition using-declaration using-directive static_assert-declaration alias-declaration
alias-declaration: using identifier = type-id
simple-declaration: decl-specifier-seqopt init-declarator-listopt ;
static_assert-declaration: static_assert ( constant-expression , string-literal ) ;
A.6 Declarations
decl-specifier: storage-class-specifier
type-specifier function-specifier friend typedef constexpr alignment-specifier
decl-specifier-seq: decl-specifier-seqopt decl-specifier
storage-class-specifier:
register static extern mutable
function-specifier:
inline virtual explicit
typedef-name: identifier
type-specifier: simple-type-specifier
class-specifier enum-specifier elaborated-type-specifier typename-specifier cv-qualifier
Draft
A.6 Declarations Grammar summary 1098
simple-type-specifier: ::opt nested-name-specifieropt type-name ::opt nested-name-specifier template simple-template-id char char16_t char32_t wchar_t bool short int long signed unsigned float double void auto decltype ( expression )
type-name: class-name
enum-name typedef-name
elaborated-type-specifier: class-key ::opt nested-name-specifieropt identifier class-key ::opt nested-name-specifieropt templateopt simple-template-id enum-key ::opt nested-name-specifieropt identifier
alignment-specifier: alignas ( constant-expression ) alignas ( type-id )
enum-name: identifier
enum-specifier: enum-key identifieropt enum-baseopt enum-key identifieropt enum-baseopt { enumerator-list , }
enum-key:
enum enum class enum struct
enum-base: : type-specifier-seq
enumerator-list: enumerator-definition
enumerator-list , enumerator-definition enumerator-definition:
enumerator
enumerator = constant-expression enumerator:
identifier
{ enumerator-listopt }
Draft
1099
Grammar summary
namespace-name: original-namespace-name
namespace-alias original-namespace-name:
identifier namespace-definition:
named-namespace-definition
unnamed-namespace-definition named-namespace-definition:
original-namespace-definition
extension-namespace-definition original-namespace-definition:
namespace identifier { namespace-body } extension-namespace-definition:
namespace original-namespace-name { namespace-body } unnamed-namespace-definition:
namespace { namespace-body } namespace-body:
declaration-seqopt
namespace-alias: identifier
namespace-alias-definition: namespace identifier = qualified-namespace-specifier ;
qualified-namespace-specifier: ::opt nested-name-specifieropt namespace-name
using-declaration: using typenameopt ::opt nested-name-specifier unqualified-id ; using :: unqualified-id ;
using-directive: using namespace ::opt nested-name-specifieropt namespace-name ;
A.7 Declarators
[gram.decl]
asm-definition: asm ( string-literal ) ;
linkage-specification: extern string-literal { declaration-seqopt } extern string-literal declaration
A.7 Declarators
init-declarator-list: init-declarator
init-declarator-list , init-declarator init-declarator:
declarator initializeropt
declarator: direct-declarator
ptr-operator declarator
Draft
A.7 Declarators
direct-declarator: declarator-id
direct-declarator ( parameter-declaration-clause ) cv-qualifier-seqopt ref-qualifieropt exception-specificationopt
direct-declarator [ constant-expressionopt ]
( declarator ) ptr-operator:
* cv-qualifier-seqopt & && ::opt nested-name-specifier * cv-qualifier-seqopt
cv-qualifier-seq: cv-qualifier cv-qualifier-seqopt
cv-qualifier:
const volatile
ref-qualifier:
&
&&
declarator-id: ...opt id-expression
::opt nested-name-specifieropt class-name type-id:
type-specifier-seq abstract-declaratoropt
type-specifier-seq: type-specifier type-specifier-seqopt
abstract-declarator: ptr-operator abstract-declaratoropt direct-abstract-declarator ...
direct-abstract-declarator: direct-abstract-declaratoropt
( parameter-declaration-clause ) cv-qualifier-seqopt direct-abstract-declaratoropt [ constant-expressionopt ] ( abstract-declarator )
parameter-declaration-clause: parameter-declaration-listopt ...opt parameter-declaration-list , ...
parameter-declaration-list: parameter-declaration
parameter-declaration-list , parameter-declaration
Draft
Grammar summary 1100
ref-qualifieropt exception-specificationopt
1101
Grammar summary
parameter-declaration: decl-specifier-seq declarator decl-specifier-seq declarator = assignment-expression decl-specifier-seq abstract-declaratoropt decl-specifier-seq abstract-declaratoropt = assignment-expression
function-definition: decl-specifier-seqopt declarator function-body decl-specifier-seqopt declarator = default ; decl-specifier-seqopt declarator = delete ;
function-body: ctor-initializeropt compound-statement function-try-block
initializer: = initializer-clause
( expression-list )
initializer-clause: assignment-expression
{ initializer-list ,opt } {}
initializer-list: initializer-clause ...opt
A.8 Classes
[gram.class]
initializer-list , initializer-clause ...opt A.8 Classes
class-name: identifier
simple-template-id class-specifier:
class-head { member-specificationopt }
class-head: class-key identifieropt base-clauseopt class-key nested-name-specifier identifier base-clauseopt class-key nested-name-specifieropt simple-template-id base-clauseopt
class-key:
class struct union
member-specification: member-declaration member-specificationopt access-specifier : member-specificationopt
Draft
A.9
A.9
A.10
Derived classes
member-declaration: decl-specifier-seqopt member-declarator-listopt ; function-definition ;opt ::opt nested-name-specifier templateopt unqualified-id ; using-declaration static_assert-declaration template-declaration
member-declarator-list: member-declarator
member-declarator-list , member-declarator
member-declarator: declarator pure-specifieropt
declarator constant-initializeropt identifieropt : constant-expression
pure-specifier:
=0
constant-initializer: = constant-expression
Derived classes
base-clause: : base-specifier-list
base-specifier-list: base-specifier ...opt
base-specifier-list , base-specifier ...opt
base-specifier: ::opt nested-name-specifieropt class-name
Grammar summary 1102
[gram.derived]
[gram.special]
virtual access-specifieropt ::opt
nested-name-specifieropt class-name nested-name-specifieropt class-name
access-specifier virtualopt
access-specifier:
private protected public
Special member functions
::opt
conversion-function-id: operator conversion-type-id
conversion-type-id: type-specifier-seq conversion-declaratoropt
conversion-declarator: ptr-operator conversion-declaratoropt
ctor-initializer: : mem-initializer-list
Draft
1103
Grammar summary
mem-initializer-list: mem-initializer ...opt
mem-initializer , mem-initializer-list ...opt mem-initializer:
mem-initializer-id ( expression-listopt )
mem-initializer-id: ::opt nested-name-specifieropt class-name identifier
A.11
Overloading
[gram.over]
[gram.temp]
A.11 Overloading
operator-function-id: operator operator
operator: one of new delete new[]
delete[] +-*/%^&|∼
! = < > += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= && || ++ -- , ->* -> () []
A.12 Templates
template-declaration: exportopt template < template-parameter-list > declaration
template-parameter-list: template-parameter
template-parameter-list , template-parameter
template-parameter: type-parameter
parameter-declaration
type-parameter: class ...opt identifieropt
class identifieropt = type-id typename ...opt identifieropt typename identifieropt = type-id template < template-parameter-list > class ...opt identifieropt template < template-parameter-list > class identifieropt = id-expression
simple-template-id: template-name < template-argument-listopt >
template-id: simple-template-id
operator-function-id < template-argument-listopt >
template-name: identifier
Draft
A.13
A.13
A.14
Exception handling
template-argument-list: template-argument ...opt
template-argument-list , template-argument ...opt
template-argument: constant-expression
Grammar summary 1104
[gram.except]
[gram.cpp]
type-id id-expression
typename-specifier: typename ::opt typename ::opt
nested-name-specifier identifier nested-name-specifier templateopt simple-template-id
explicit-instantiation: externopt template declaration
explicit-specialization: template < > declaration
Exception handling
try-block: try compound-statement handler-seq
function-try-block: try ctor-initializeropt compound-statement handler-seq
handler-seq: handler handler-seqopt
handler: catch ( exception-declaration ) compound-statement
exception-declaration: type-specifier-seq declarator type-specifier-seq abstract-declarator type-specifier-seq ...
throw-expression: throw assignment-expressionopt
exception-specification: throw ( type-id-listopt )
type-id-list: type-id ...opt
type-id-list , type-id ...opt