ccmode: Brace List Symbols
10.2.5 Brace List Symbols
-------------------------
There are a set of syntactic symbols that are used to recognize
constructs inside of brace lists. A brace list is defined as an ‘enum’
or aggregate initializer list, such as might statically initialize an
array of structs. The three special aggregate constructs in Pike, ‘({
})’, ‘([ ])’ and ‘(< >)’, are treated as brace lists too. An example:
1: static char* ingredients[] =
2: {
3: "Ham",
4: "Salt",
5: NULL
6: };
Following convention, line 2 in this example is assigned
‘brace-list-open’ syntax, and line 3 is assigned ‘brace-list-intro’
syntax. Likewise, line 6 is assigned ‘brace-list-close’ syntax. Lines
4 and 5 however, are assigned ‘brace-list-entry’ syntax, as would all
subsequent lines in this initializer list.
Your static initializer might be initializing nested structures, for
example:
1: struct intpairs[] =
2: {
3: { 1, 2 },
4: {
5: 3,
6: 4
7: }
8: { 1,
9: 2 },
10: { 3, 4 }
11: };
Here, you’ve already seen the analysis of lines 1, 2, 3, and 11. On
line 4, things get interesting; this line is assigned ‘brace-entry-open’
syntactic symbol because it’s a bracelist entry line that starts with an
open brace. Lines 5 and 6 (and line 9) are pretty standard, and line 7
is a ‘brace-list-close’ as you’d expect. Once again, line 8 is assigned
as ‘brace-entry-open’ as is line 10.