94 lines
10 KiB
Markdown
94 lines
10 KiB
Markdown
[gram.stmt]
|
||
|
||
# Annex A (informative) Grammar summary [[gram]](./#gram)
|
||
|
||
## A.6 Statements [gram.stmt]
|
||
|
||
[statement:](stmt.pre#nt:statement "8.1 Preamble [stmt.pre]")
|
||
[*labeled-statement*](stmt.label#nt:labeled-statement "8.2 Label [stmt.label]")
|
||
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt [*expression-statement*](stmt.expr#nt:expression-statement "8.3 Expression statement [stmt.expr]")
|
||
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt [*compound-statement*](stmt.block#nt:compound-statement "8.4 Compound statement or block [stmt.block]")
|
||
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt [*selection-statement*](stmt.select.general#nt:selection-statement "8.5.1 General [stmt.select.general]")
|
||
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt [*iteration-statement*](stmt.iter.general#nt:iteration-statement "8.6.1 General [stmt.iter.general]")
|
||
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt [*expansion-statement*](stmt.expand#nt:expansion-statement "8.7 Expansion statements [stmt.expand]")
|
||
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt [*jump-statement*](stmt.jump.general#nt:jump-statement "8.8.1 General [stmt.jump.general]")
|
||
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt [*assertion-statement*](stmt.contract.assert#nt:assertion-statement "8.9 Assertion statement [stmt.contract.assert]")
|
||
[*declaration-statement*](stmt.dcl#nt:declaration-statement "8.10 Declaration statement [stmt.dcl]")
|
||
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt [*try-block*](except.pre#nt:try-block "14.1 Preamble [except.pre]")
|
||
|
||
[init-statement:](stmt.pre#nt:init-statement "8.1 Preamble [stmt.pre]")
|
||
[*expression-statement*](stmt.expr#nt:expression-statement "8.3 Expression statement [stmt.expr]")
|
||
[*simple-declaration*](dcl.pre#nt:simple-declaration "9.1 Preamble [dcl.pre]")
|
||
[*alias-declaration*](dcl.pre#nt:alias-declaration "9.1 Preamble [dcl.pre]")
|
||
|
||
[condition:](stmt.pre#nt:condition "8.1 Preamble [stmt.pre]")
|
||
[*expression*](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]")
|
||
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt [*decl-specifier-seq*](dcl.spec.general#nt:decl-specifier-seq "9.2.1 General [dcl.spec.general]") [*declarator*](dcl.decl.general#nt:declarator "9.3.1 General [dcl.decl.general]") [*brace-or-equal-initializer*](dcl.init.general#nt:brace-or-equal-initializer "9.5.1 General [dcl.init.general]")
|
||
[*structured-binding-declaration*](dcl.pre#nt:structured-binding-declaration "9.1 Preamble [dcl.pre]") [*initializer*](dcl.init.general#nt:initializer "9.5.1 General [dcl.init.general]")
|
||
|
||
[for-range-declaration:](stmt.pre#nt:for-range-declaration "8.1 Preamble [stmt.pre]")
|
||
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt [*decl-specifier-seq*](dcl.spec.general#nt:decl-specifier-seq "9.2.1 General [dcl.spec.general]") [*declarator*](dcl.decl.general#nt:declarator "9.3.1 General [dcl.decl.general]")
|
||
[*structured-binding-declaration*](dcl.pre#nt:structured-binding-declaration "9.1 Preamble [dcl.pre]")
|
||
|
||
[for-range-initializer:](stmt.pre#nt:for-range-initializer "8.1 Preamble [stmt.pre]")
|
||
[*expr-or-braced-init-list*](dcl.init.general#nt:expr-or-braced-init-list "9.5.1 General [dcl.init.general]")
|
||
|
||
[label:](stmt.label#nt:label "8.2 Label [stmt.label]")
|
||
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt [*identifier*](lex.name#nt:identifier "5.11 Identifiers [lex.name]") :
|
||
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt case [*constant-expression*](expr.const#nt:constant-expression "7.7 Constant expressions [expr.const]") :
|
||
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt default :
|
||
|
||
[labeled-statement:](stmt.label#nt:labeled-statement "8.2 Label [stmt.label]")
|
||
[*label*](stmt.label#nt:label "8.2 Label [stmt.label]") [*statement*](stmt.pre#nt:statement "8.1 Preamble [stmt.pre]")
|
||
|
||
[expression-statement:](stmt.expr#nt:expression-statement "8.3 Expression statement [stmt.expr]")
|
||
[*expression*](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]")opt ;
|
||
|
||
[compound-statement:](stmt.block#nt:compound-statement "8.4 Compound statement or block [stmt.block]")
|
||
{ [*statement-seq*](stmt.block#nt:statement-seq "8.4 Compound statement or block [stmt.block]")opt [*label-seq*](stmt.block#nt:label-seq "8.4 Compound statement or block [stmt.block]")opt }
|
||
|
||
[statement-seq:](stmt.block#nt:statement-seq "8.4 Compound statement or block [stmt.block]")
|
||
[*statement*](stmt.pre#nt:statement "8.1 Preamble [stmt.pre]") [*statement-seq*](stmt.block#nt:statement-seq "8.4 Compound statement or block [stmt.block]")opt
|
||
|
||
[label-seq:](stmt.block#nt:label-seq "8.4 Compound statement or block [stmt.block]")
|
||
[*label*](stmt.label#nt:label "8.2 Label [stmt.label]") [*label-seq*](stmt.block#nt:label-seq "8.4 Compound statement or block [stmt.block]")opt
|
||
|
||
[selection-statement:](stmt.select.general#nt:selection-statement "8.5.1 General [stmt.select.general]")
|
||
if constexpropt ( [*init-statement*](stmt.pre#nt:init-statement "8.1 Preamble [stmt.pre]")opt [*condition*](stmt.pre#nt:condition "8.1 Preamble [stmt.pre]") ) [*statement*](stmt.pre#nt:statement "8.1 Preamble [stmt.pre]")
|
||
if constexpropt ( [*init-statement*](stmt.pre#nt:init-statement "8.1 Preamble [stmt.pre]")opt [*condition*](stmt.pre#nt:condition "8.1 Preamble [stmt.pre]") ) [*statement*](stmt.pre#nt:statement "8.1 Preamble [stmt.pre]") else [*statement*](stmt.pre#nt:statement "8.1 Preamble [stmt.pre]")
|
||
if !opt consteval [*compound-statement*](stmt.block#nt:compound-statement "8.4 Compound statement or block [stmt.block]")
|
||
if !opt consteval [*compound-statement*](stmt.block#nt:compound-statement "8.4 Compound statement or block [stmt.block]") else [*statement*](stmt.pre#nt:statement "8.1 Preamble [stmt.pre]")
|
||
switch ( [*init-statement*](stmt.pre#nt:init-statement "8.1 Preamble [stmt.pre]")opt [*condition*](stmt.pre#nt:condition "8.1 Preamble [stmt.pre]") ) [*statement*](stmt.pre#nt:statement "8.1 Preamble [stmt.pre]")
|
||
|
||
[iteration-statement:](stmt.iter.general#nt:iteration-statement "8.6.1 General [stmt.iter.general]")
|
||
while ( [*condition*](stmt.pre#nt:condition "8.1 Preamble [stmt.pre]") ) [*statement*](stmt.pre#nt:statement "8.1 Preamble [stmt.pre]")
|
||
do [*statement*](stmt.pre#nt:statement "8.1 Preamble [stmt.pre]") while ( [*expression*](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]") ) ;
|
||
for ( [*init-statement*](stmt.pre#nt:init-statement "8.1 Preamble [stmt.pre]") [*condition*](stmt.pre#nt:condition "8.1 Preamble [stmt.pre]")opt ; [*expression*](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]")opt ) [*statement*](stmt.pre#nt:statement "8.1 Preamble [stmt.pre]")
|
||
for ( [*init-statement*](stmt.pre#nt:init-statement "8.1 Preamble [stmt.pre]")opt [*for-range-declaration*](stmt.pre#nt:for-range-declaration "8.1 Preamble [stmt.pre]") : [*for-range-initializer*](stmt.pre#nt:for-range-initializer "8.1 Preamble [stmt.pre]") ) [*statement*](stmt.pre#nt:statement "8.1 Preamble [stmt.pre]")
|
||
|
||
[expansion-statement:](stmt.expand#nt:expansion-statement "8.7 Expansion statements [stmt.expand]")
|
||
template for ([*init-statement*](stmt.pre#nt:init-statement "8.1 Preamble [stmt.pre]")opt [*for-range-declaration*](stmt.pre#nt:for-range-declaration "8.1 Preamble [stmt.pre]") :[*expansion-initializer*](stmt.expand#nt:expansion-initializer "8.7 Expansion statements [stmt.expand]") ) [*compound-statement*](stmt.block#nt:compound-statement "8.4 Compound statement or block [stmt.block]")
|
||
|
||
[expansion-initializer:](stmt.expand#nt:expansion-initializer "8.7 Expansion statements [stmt.expand]")
|
||
[*expression*](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]")
|
||
[*expansion-init-list*](stmt.expand#nt:expansion-init-list "8.7 Expansion statements [stmt.expand]")
|
||
|
||
[expansion-init-list:](stmt.expand#nt:expansion-init-list "8.7 Expansion statements [stmt.expand]")
|
||
{ [*expression-list*](expr.post.general#nt:expression-list "7.6.1.1 General [expr.post.general]")opt }
|
||
|
||
[jump-statement:](stmt.jump.general#nt:jump-statement "8.8.1 General [stmt.jump.general]")
|
||
break ;
|
||
continue ;
|
||
return [*expr-or-braced-init-list*](dcl.init.general#nt:expr-or-braced-init-list "9.5.1 General [dcl.init.general]")opt ;
|
||
[*coroutine-return-statement*](stmt.return.coroutine#nt:coroutine-return-statement "8.8.5 The co_return statement [stmt.return.coroutine]")
|
||
goto [*identifier*](lex.name#nt:identifier "5.11 Identifiers [lex.name]") ;
|
||
|
||
[coroutine-return-statement:](stmt.return.coroutine#nt:coroutine-return-statement "8.8.5 The co_return statement [stmt.return.coroutine]")
|
||
co_return [*expr-or-braced-init-list*](dcl.init.general#nt:expr-or-braced-init-list "9.5.1 General [dcl.init.general]")opt ;
|
||
|
||
[assertion-statement:](stmt.contract.assert#nt:assertion-statement "8.9 Assertion statement [stmt.contract.assert]")
|
||
contract_assert [*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt ( [*conditional-expression*](expr.cond#nt:conditional-expression "7.6.16 Conditional operator [expr.cond]") ) ;
|
||
|
||
[declaration-statement:](stmt.dcl#nt:declaration-statement "8.10 Declaration statement [stmt.dcl]")
|
||
[*block-declaration*](dcl.pre#nt:block-declaration "9.1 Preamble [dcl.pre]")
|