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 (Literal Symbols for an example.)