================================================================================ Branches on measured bits ================================================================================ if (c[1]) x q[2]; if (c[0] == 1) { z q[2]; } else { id q[2]; } if(c==1) x q[0]; if (!c[0] && c[1]) { h q; } else if (c[2]) { x q; } -------------------------------------------------------------------------------- (source_file (if_statement (index_expression (identifier) (index (integer_literal))) (gate_call (identifier) (operand_list (indexed_identifier (identifier) (index (integer_literal)))))) (if_statement (binary_expression (index_expression (identifier) (index (integer_literal))) (integer_literal)) (scope (gate_call (identifier) (operand_list (indexed_identifier (identifier) (index (integer_literal)))))) (scope (gate_call (identifier) (operand_list (indexed_identifier (identifier) (index (integer_literal))))))) (if_statement (binary_expression (identifier) (integer_literal)) (gate_call (identifier) (operand_list (indexed_identifier (identifier) (index (integer_literal)))))) (if_statement (binary_expression (unary_expression (index_expression (identifier) (index (integer_literal)))) (index_expression (identifier) (index (integer_literal)))) (scope (gate_call (identifier) (operand_list (indexed_identifier (identifier))))) (if_statement (index_expression (identifier) (index (integer_literal))) (scope (gate_call (identifier) (operand_list (indexed_identifier (identifier)))))))) ================================================================================ Loops ================================================================================ for uint i in [0:n - 2] { cx q[i], q[i + 1]; } for i in [0:2:10] x q[i]; for int j in {1, 3, 5} { h q[j]; } for int v in values { count += v; } while (count > 0) { count -= 1; if (count == 2) continue; if (count < 0) break; } -------------------------------------------------------------------------------- (source_file (for_statement (scalar_type) (identifier) (range (range_expression (integer_literal) (binary_expression (identifier) (integer_literal)))) (scope (gate_call (identifier) (operand_list (indexed_identifier (identifier) (index (identifier))) (indexed_identifier (identifier) (index (binary_expression (identifier) (integer_literal)))))))) (for_statement (identifier) (range (range_expression (integer_literal) (integer_literal) (integer_literal))) (gate_call (identifier) (operand_list (indexed_identifier (identifier) (index (identifier)))))) (for_statement (scalar_type) (identifier) (set_expression (integer_literal) (integer_literal) (integer_literal)) (scope (gate_call (identifier) (operand_list (indexed_identifier (identifier) (index (identifier))))))) (for_statement (scalar_type) (identifier) (identifier) (scope (assignment_statement (indexed_identifier (identifier)) (identifier)))) (while_statement (binary_expression (identifier) (integer_literal)) (scope (assignment_statement (indexed_identifier (identifier)) (integer_literal)) (if_statement (binary_expression (identifier) (integer_literal)) (continue_statement)) (if_statement (binary_expression (identifier) (integer_literal)) (break_statement))))) ================================================================================ A switch, and the end of a program ================================================================================ switch (k) { case 0, 1 { x q[0]; } default { z q[0]; } } end; -------------------------------------------------------------------------------- (source_file (switch_statement (identifier) (case_clause (integer_literal) (integer_literal) (scope (gate_call (identifier) (operand_list (indexed_identifier (identifier) (index (integer_literal))))))) (default_clause (scope (gate_call (identifier) (operand_list (indexed_identifier (identifier) (index (integer_literal)))))))) (end_statement))