     1 /*
     2   Раскраска синтаксиса Простого Рефала
     3   Можно писать многострочные комментарии.
     4 */
     5
     6 // И однострочные тоже.
     7
     8 //FROM Library
     9 $EXTERN Prout;
    10
    11 //FROM LibraryEx
    12 $EXTERN SaveFile, LoadFile, ArgList;
    13
    14 $ENUM Encapsulated;
    15
    16 $EENUM ExportedEnum;
    17 $SWAP LocalVariable;
    18 $ESWAP GlobalVariable;
    19 $LABEL Success, Fails;  // Устаревшее ключевое слово, но надо поддерживать
    20
    21 $SPEC FuncName e.STATIC (e.dynamic);
    22
    23 $XETERN Broken; // А вот подсветка ошибки
    24
    25 $ENTRY CreateEncapsulated {
    26   /* пусто */ = #Fails;
    27
    28   e.X = [Encapsulated e.X] #Success;
    29 }
    30
    31 $FORWARD Main;  // Раньше было обязательным, сейчас игнорируется
    32
    33 $ENTRY Go {
    34   = <Main <ArgList>>;
    35 }
    36
    37 %%
    38 void f() {
    39   // Вставка кода на C++
    40   for (int i = 0; i < 100; ++i)
    41     printf("%i = 0x%x\n", i);
    42
    43   bool x = 1 < 2 && 3 > 1;
    44 }
    45 %%
    46
    47 Main {
    48   (e.ProgName) =
    49     <Prout 'Arguments not found' 10 12>
    50     <Prout "A am compound symbol">
    51     <Prout lowercase _underscore>
    52     // А вот незакрытая кавычка:
    53     <Prout 'Ooops>;
    54
    55   (e.ProgName) e.Files =
    56     <Map
    57       {
    58         (e.NextFile) =
    59           <SaveFile
    60             (e.NextFile '.out')
    61             <LoadFile e.NextFile>
    62           >;
    63       }
    64       e.Files
    65     >;
    66 }
    67
    68 $ENTRY NativeFunction {
    69 %%
    70   // Нативные вставки могут быть внутри функций
    71   return refalrts::cRecognitionImpossible;
    72 %%
    73 }