ccmode: Conditional Construct Symbols

 
 10.2.3 Conditional Construct Symbols
 ------------------------------------
 
 Here is a (totally contrived) example which illustrates how syntax is
 assigned to various conditional constructs:
 
       1: void spam( int index )
       2: {
       3:     for( int i=0; i<index; i++ )
       4:     {
       5:         if( i == 10 )
       6:             do_something_special();
       7:         else
       8:           silly_label:
       9:             do_something( i );
      10:     }
      11:     do {
      12:         another_thing( i-- );
      13:     }
      14:     while( i > 0 );
      15: }
 
    Only the lines that illustrate new syntactic symbols will be
 discussed.
 
    Line 4 has a brace which opens a conditional’s substatement block.
 It is thus assigned ‘substatement-open’ syntax, and since line 5 is the
 first line in the substatement block, it is assigned
 ‘statement-block-intro’ syntax.  Line 10 contains the brace that closes
 the inner substatement block, and is therefore given the syntax
 ‘block-close’(1).  Line 13 is treated the same way.
 
    Lines 6 and 9 are also substatements of conditionals, but since they
 don’t start blocks they are given ‘substatement’ syntax instead of
 ‘substatement-open’.
 
    Line 8 contains a label, which is normally given ‘label’ syntax.
 This one is however a bit special since it’s between a conditional and
 its substatement.  It’s analyzed as ‘substatement-label’ to let you
 handle this rather odd case differently from normal labels.
 
    Line 7 start with an ‘else’ that matches the ‘if’ statement on line
 5.  It is therefore given the ‘else-clause’ syntax and is anchored on
 the matching ‘if’.  The ‘try’-‘catch’ constructs in C++ and Java are
 treated this way too, except that ‘catch’ and (in Java) ‘finally’, are
 marked with ‘catch-clause’.
 
    The ‘while’ construct on line 14 that closes a ‘do’ conditional is
 given the special syntax ‘do-while-closure’ if it appears on a line by
 itself.  Note that if the ‘while’ appeared on the same line as the
 preceding close brace, that line would still have ‘block-close’ syntax.
 
    ---------- Footnotes ----------
 
    (1) ‘block-open’ is used only for “free-standing” blocks, and is
 somewhat rare (SeeLiteral Symbols for an example.)