﻿Мне было лень изучать жабаскрып, потому всего за полгода я сделал вот этот dtscript (как выразился Абикак, "питоний джабаскрып").
Синтаксис dtscript не завист от пробелов, табов, переносов строк. Конец одной конструкции определяется по символу ';' или '}' (если перед этим был символ '{')


========================================[переменные]========================================

объявление переменной и присвоение значения синтаксически никак не отличаются: 
    тип(имя = значение);

у переменных есть контекст:
    bool(h=false);
    if (...) 
    {
        bool(j=true);
        Log("w", h);  выведет true, так как есть доступ к переменным предыдущих уровней
    }
    Log("w", j);  выдаст ошибку "KeyNotFoundException", так как вызывается с предшествующего объявлению переменной уровня
    
┌────────┬────────────────┬───────────┬───────────────────┐
│ тип    │ аналог в c#    │ операции  │ пример            │ 
├────────┼────────────────┼───────────┼───────────────────┤
│ bool   │ System.Boolean │ <,>,==,!= │ bool(a=1<3);      │
├────────┼────────────────┼───────────┼───────────────────┤
│ num    │ System.Double  │ +,-,*,/   │ num(a=9.6);       │
├────────┼────────────────┼───────────┼───────────────────┤
│ string │ System.String  │ +         │ string(a="text"); │
└────────┴────────────────┴───────────┴───────────────────┘


==========================================[методы]==========================================

Oбъявлять свои методы пока что нельзя, можно только использовать встроенные:
    метод;                            если нет параметров
    Метод(параметр0, параметр1...);     параметрами могут быть значения и переменные, но не выражения

┌────────────────────────────┬─────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────┐
│ метод                      │ аналог в с#                                             │ шо делает                                              │
├────────────────────────────┼─────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│ pause                      │ System.Console.ReadKey()                                │ приостанавливает выполнение скрипта до нажатия клавиши │
├────────────────────────────┼─────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│ break                      │ break                                                   │ прекращает выполнение уровня скрипта                   │
├────────────────────────────┼─────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│ Log("w", "text", ...)      │ DTLib.ColoredConsole.Write(params string[])             │ выводит в консоль цветной текст                        │
├────────────────────────────┼─────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│ Run("файл.ехе","аргументы")│ System.Diagnostics.Process.Start(string)                │ запускает прогу                                        │
├────────────────────────────┼─────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│ Download("f0", "f1")       │ DTLib.NetWork.FSP_Download(this Socket, string, string) │ скачивает файл по FSP протоколу                        │
└────────────────────────────┴─────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────┘


=========================================[операторы]========================================

Параметром может быть переменная, но не выражение.

while (bool) 
{
    ...
}

if (bool)
{
    ...
}
