Скриптовый язык 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;
Комментарии в исходных текстах
Для более подробного знакомства с языком и вариантами его использования рекомендуем посмотреть примеры работы с процедурами и функциями.
Также примеры использования скриптового языка вы можете найти на официальном форуме в разделе "Боты, плагины, скрипты и разные дополнения".