Statement Grammar

statement labeled‑statement | control‑statement | expression‑statement | assignment‑statement | construction‑statement | delete‑statement | destroy‑statement | empty‑statement | throw‑statement | try‑statement | assert‑statement | conditional‑compilation‑statement
label id :
labeled‑statement label statement
control‑statement compound‑statement | return‑statement | if‑statement | while‑statement | do‑statement | range‑for‑statement | for‑statement | break‑statement | continue‑statement | goto‑statement | switch‑statement | goto‑case‑statement | goto‑default‑statement
compound‑statement { statement* }
return‑statement return expression? ;
if‑statement if ( expression ) statement (else statement)?
while‑statement while ( expression ) statement
do‑statement do statement while ( expression ) ;
for‑statement for ( for‑init‑statement expression? ; for‑loop‑statement‑expr ) statement
for‑init‑statement assignment‑statement | construction‑statement | empty‑statement
for‑loop‑statement‑expr assignment‑statement‑expr | expression | <empty>
range‑for‑statement for ( type‑expr identifier : expression ) statement
break‑statement break ;
continue‑statement continue ;
goto‑statement goto id ;
switch‑statement switch ( expression ) { (case‑statement | default‑statement)* }
case‑statement (case expression :)+ statement*
default‑statement default : statement*
goto‑case‑statement goto case expression ;
goto‑default‑statement goto default ;
assignment‑statement‑expr expression = expression
assignment‑statement assignment‑statement‑expr ;
construction‑statement type‑expr identifier (= expression | ( argument‑list ) | <empty>) ;
delete‑statement delete expression ;
destroy‑statement destroy expression ;
expression‑statement expression ;
empty‑statement ;
throw‑statement throw expression? ;
try‑statement try compound‑statement catch+
catch catch ( type‑expr identifier? ) compound‑statement
assert‑statement # assert expression ;
conditional‑compilation‑statement # if ( conditional‑compilation‑expression ) statement* (# elif ( conditional‑compilation‑expression ) statement*)* (# else statement*)? # endif
conditional‑compilation‑expression conditional‑compilation‑disjunction
conditional‑compilation‑disjunction conditional‑compilation‑conjunction (|| conditional‑compilation‑conjunction)*
conditional‑compilation‑conjunction conditional‑compilation‑prefix (&& conditional‑compilation‑prefix)*
conditional‑compilation‑prefix ! conditional‑compilation‑prefix | conditional‑compilation‑primary
conditional‑compilation‑primary id | ( conditional‑compilation‑expression )