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

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

Язык 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;

В программе можно использовать комментарии, их три типа. Например:

program Test;
// это однострочный комментарий. Всё, что идёт после двойных наклонных черт 
// в этих строках, игнорируется

procedure Increment(var n:integer);
begin
{а это многострочных комментарий
в фигурных скобках}
  n:=n-1;
end;

procedure Decrement(var n:integer);
begin
  n:=n-1; (* а ещё можно *)
end;(*вот 
так
делать*)

begin
  x:=100;
  Increment(x);
  Decrement(x);
end.

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

 

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