MyChat Server: Скриптовый язык MSL

Скриптовый язык MSL в сервере офисного мессенджера MyChat

Язык MyChat Script Language или сокращенно MSL по своей семантике напоминает Pascal. Стандартная схема любого скрипта выглядит так:

program TestScript;
begin

end.

program — это служебное необязательное слово, begin..end — операторные скобки. В конце скрипта стоит точка, она символизирует конец программы.

 

Все операторы языка разделяются точкой с запятой, регистр букв не имеет значения. Переменные должны описываться заранее и иметь четко определенный тип. В названии могут быть большие и маленькие латинские буквы, цифры и знак подчеркивания. Названия переменных не могут начинаться с цифры и содержать в своем имени пробелы. Например:

program Variables;
var
  st: string;
  x, y: integer;
begin
  x := 100;
  y := 150;

  st := inttostr(x + y);
end.

В этой программе объявляются 3 переменные: одна строка и две целочисленные, а затем текстовой переменной st присваивается сумма x и y. Обратите внимание, что для этого пришлось применить функцию перевода числа в строку, так как в MSL осуществляется жесткий контроль типов данных при преобразованиях.

 

MSL поддерживает циклы, их три вида:

 

1.Итеративный:

for i := 1 to 100 do begin

end;

2.С предусловием:

while x > 100 do begin

end;

3.С постусловием:

repeat

until r = false;

Также есть ветвления с поддержкой логических условий и оператор выбора:

if (x = 10) and (StrToInt(test) < 100) then begin

end;

В операторе case не может использоваться переменная типа string.

case z of
  1: begin 
    x := 100;
    y := 200;
  end;
  2: x := 700;
  3: y := 10000;
  else x := 0;
end;

И, наконец, поддерживается механизм подпрограмм. Это процедуры и функции. Функция отличается от процедуры тем, что возвращает в своем имени после отработки значение. В процедуры и функции можно передавать параметры по ссылке и по значению, то есть, если перед переменной стоит служебное слово var (в параметрах функции), то это значит, что если изменить переменную в функции, она изменится и в программе, откуда вызывается данная функция. Если служебного слова var перед переменной нет — можно делать с переменной что угодно, в вызывающей программе (или подпрограмме) передаваемая переменная не изменится.

procedure Test(x, y: integer; var st: string);
begin
  st := IntToStr(x * y);
end;

function Fact(n: integer): integer;
var 
  i,x: integer;
begin
  x := 1;
  
    for i := 1 to n do x := x * i;
    
  result := x;
end;

 

Комментарии в исходных текстах

Составные типы данных record

Работа с дробными числами

 

Для более подробного знакомства с языком и вариантами его использования рекомендуем посмотреть примеры работы с процедурами и функциями.

 

Также примеры использования скриптового языка вы можете найти на официальном форуме в разделе "Боты, плагины, скрипты и разные дополнения".