    /* This test file tests kates Lex/Flex highlighting */

    %option c++
    %option yyclass="KateTester"
    %option yylineno

     /* This is a C(++) comment */

    /* This one is a lex comment ! */

    %{
    #include <iostream>
    #include "realparser.hpp"
    using namespace std;
    %}

    /* Some definitions */
    DIGIT    [0-9]
    LETTER   [_a-zA-Z]

    %%

     /* Comment *shall be indented here* */
    [ \t\n\r]+

     /* Note: there is a bad } just here     vvv */
    \/\*([^\*]|\*[^/])*\*\/ { foo(a, b, c); } }

     /* A start condition scope... */
    <ESC>{
      "a" {

      /* C mode ! */
      return 0;
    }

      "b" %{

      /* C mode, too ! */
      return 0;
    %}

      "c" return 0; // C++ comment
    }

     /* Big rule */
    \"([^"\\]|\\.)*\" {

       yylval.string_val = new char[strlen(yytext) + 1];
       int j = 0, i = 1;

       while (yytext[i] != '"')
          if (yytext[i] != '\\')
             yylval.string_val[j++] = yytext[i++];
          else
             switch (yytext[i + 1])
             {
             case 'n':
                yylval.string_val[j++] = '\n'; i += 2;
                break;
             default:
                yylval.string_val[j++] << yytext[i + 1], i += 2;
             }

        yylval.string_val[j] = 0;
        return TOK_STRING;

    }

     /* Dot (match all) */
    .             {return yylval.int_val = yytext[0];}

    %%

    // Here is pure C(++)
    #include <iostream>

    int main(void)
    {
      std::cout << "Hello, World\n";
      return 0;
    }