|  | # Compound Statements | 
|  |  | 
|  | Compound statements are statements that can hold other statements. | 
|  |  | 
|  | This document maps the WGSL compound statements to their semantic tree representations. | 
|  |  | 
|  | ## if statement | 
|  |  | 
|  | WGSL: | 
|  | ``` | 
|  | if (condition_a) { | 
|  | statement_a; | 
|  | } else if (condition_b) { | 
|  | statement_b; | 
|  | } else { | 
|  | statement_c; | 
|  | } | 
|  | ``` | 
|  |  | 
|  | Semantic tree: | 
|  | ``` | 
|  | sem::IfStatement { | 
|  | condition_a | 
|  | sem::BlockStatement { | 
|  | statement_a | 
|  | } | 
|  | sem::IfStatement { | 
|  | condition_b | 
|  | sem::BlockStatement { | 
|  | statement_b | 
|  | } | 
|  | sem::BlockStatement { | 
|  | statement_c | 
|  | } | 
|  | } | 
|  | } | 
|  | ``` | 
|  |  | 
|  | ## for loop | 
|  |  | 
|  | WGSL: | 
|  | ``` | 
|  | for (initializer; condition; continuing) { | 
|  | statement; | 
|  | } | 
|  | ``` | 
|  |  | 
|  | Semantic tree: | 
|  | ``` | 
|  | sem::ForLoopStatement { | 
|  | sem::Statement  initializer | 
|  | sem::Expression condition | 
|  | sem::Statement  continuing | 
|  |  | 
|  | sem::LoopBlockStatement { | 
|  | sem::Statement statement | 
|  | } | 
|  | } | 
|  | ``` | 
|  |  | 
|  | ## while | 
|  |  | 
|  | WGSL: | 
|  | ``` | 
|  | while (condition) { | 
|  | statement; | 
|  | } | 
|  | ``` | 
|  |  | 
|  | Semantic tree: | 
|  | ``` | 
|  | sem::WhileStatement { | 
|  | sem::Expression condition | 
|  |  | 
|  | sem::LoopBlockStatement { | 
|  | sem::Statement statement | 
|  | } | 
|  | } | 
|  | ``` | 
|  |  | 
|  | ## loop | 
|  |  | 
|  | WGSL: | 
|  | ``` | 
|  | loop (condition) { | 
|  | statement_a; | 
|  | continuing { | 
|  | statement_b; | 
|  | } | 
|  | } | 
|  | ``` | 
|  |  | 
|  | Semantic tree: | 
|  | ``` | 
|  | sem::LoopStatement { | 
|  | sem::Expression condition | 
|  |  | 
|  | sem::LoopBlockStatement { | 
|  | sem::Statement statement_a | 
|  | sem::LoopContinuingBlockStatement { | 
|  | sem::Statement statement_b | 
|  | } | 
|  | } | 
|  | } | 
|  | ``` | 
|  |  | 
|  |  | 
|  | ## switch statement | 
|  |  | 
|  | WGSL: | 
|  | ``` | 
|  | switch (condition) { | 
|  | case literal_a, literal_b: { | 
|  | statement_a; | 
|  | } | 
|  | default { | 
|  | statement_b; | 
|  | } | 
|  | } | 
|  | ``` | 
|  |  | 
|  | Semantic tree: | 
|  | ``` | 
|  | sem::SwitchStatement { | 
|  | sem::Expression condition | 
|  | sem::CaseStatement { | 
|  | sem::BlockStatement { | 
|  | sem::Statement statement_a | 
|  | } | 
|  | } | 
|  | sem::CaseStatement { | 
|  | sem::BlockStatement { | 
|  | sem::Statement statement_b | 
|  | } | 
|  | } | 
|  | } | 
|  | ``` |