Next: , Previous: , Up: Style Sheets Implementation   [Contents][Index]


7.6.7 Declaring the sequences

Sequences admit several declarations too:

sequences      ::= sequences are
                     sequence_1,sequence_2...
                   end sequences
sequence       ::= rule in_face close_opt exceptions_opt
                 | C-string
                 | C-char
                 ;
close_opt      ::= rule
                 | closers are
                     rules
                   end closers
                 | <nothing>
                 ;
exceptions_opt ::= exceptions are
                     rules
                   end exceptions
                 | <nothing>
                 ;

The rules are:

As a first example, here is the correct definition for a C string:

sequences are
 "\"" Plain String "\"" Plain
     exceptions are
        "\\\\", "\\\""
     end exceptions
end sequences

Since a great deal of languages uses this kind of constructs, you may use C-string to mean exactly this, and C-char for manifest characters defined the C way.

The following example comes from ssh.ssh, the style sheet for style sheet files, in which there are two kinds of pseudo-strings: the strings (‘"example"’), and the regular expressions (‘/example/’). We do not want the content of the pseudo-strings in the face String.

sequences are
  # The comments
  "#" Comment,

  # The name of the style sheet
  "style " Keyword_strong (Label + Index1) " is" Keyword_strong,

  # Strings are exactly the C-strings, though we don't want to
  # have them in the "string" face
  "\"" Plain "\""
     exceptions are
        "\\\\", "\\\""
     end exceptions,

  # Regexps
  "/" Plain "/"
     exceptions are
        "\\\\", "\\\/"
     end exceptions

end sequences

The order between sequences does matter. For instance in Java, ‘/**’ introduces strong comments, and ‘/*’ comments. ‘/**must be declared before ‘/*’, or it will be hidden.

There are actually some sequences that could have been implemented as operators with a specific regular expression (that goes up to the closer). Nevertheless be aware of a big difference: regular expression are applied to a single line of the source file, hence, they cannot match on several lines. For instance, the C comments,

/*
 * a comment
 */

cannot be implemented with operators, though C++ comments can:

//
// a comment
//

Next: Checking a Style Sheet, Previous: Declaring the keywords and the operators, Up: Style Sheets Implementation   [Contents][Index]