[TxMt] TextMate grammars and nested multiline comments

Jens Axel Søgaard jensaxel at soegaard.net
Mon Jan 5 18:17:58 UTC 2015


Hi All,

While writing a grammar for programs written in the Racket language, I
have stumbled upon a problem.

In Racket #| starts a multiline comment and |# ends it.

The problem is that multiline comments can be nested:

  #| a comment  #| still a comment |# even
                                      more comment |#

Here is my non-working attempt:

repository:
  multilinecomment:
    begin:         \#\|
    end:           \|\#
    name:          comment
    contentName:   comment
    patterns:
    - include:     "#multilinecomment"
      name:        comment
    - match:       ([^\|]|\|(?=[^#]))*
      name:        comment

The intent of the match patterns are:

"#multilinecomment" A multiline comment can contain another multiline comment.

([^\|]|\|(?=[^#]))*
The meaning of the subexpressions:

 [^\|]        any characters not an `|`
 \|(?=[^#])   an `|` followed by a non-`#`

The entire expression thus matches a string not containg |#

Is it possible to match nested multiline comments correctly?


--
Jens Axel Søgaard


More information about the textmate mailing list