ОПИСАНИЕ ВСТРОЕННОГО ИНТЕРПРЕТАТОРА

Арго - так называется встроенный интерпретатор в программе Demagog. Это исключительно простой типизированный язык.
 
ОПЕРАТОРЫ
(В квадратных скобках [...] указаны не обязательные элементы операторов языка)
   
# все, что после этого знака - комментарий
; разделитель операторов в строке
'строка символов' строковая константа
nil значение переменной, для которой не было операций присваивания
NUM переменная1 [= константа1],... объявление числовой переменной
STR переменная1 [= константа1],... объявление строковой переменной
переменная = выражение присваивание
выражение вычисление выражения и вывод результата
   
IF логическое_выражение
  ...
[ELSE]
...
FI
условный оператор
   
DO логическое_выражение
  ...
OD
оператор цикла
   
PUT переменная1,...,переменнаяN вывод значений переменных
PUT переменная1,...,переменнаяN, следующий вывод будет в ту же строку
PUT вывод пустой строки
EXIT выход из арго-программы
   
Имена переменных регистрозависимы.
Имена переменных должны начинаться с буквы.
Арго поддерживает юникод.
Все переменные - глобальные и видимы в любом месте программы.
Описание типа может находится в любом месте.
При сложения строковой переменной с числовой тип результата автоматически преобразуется в строковый.
Присваивание строкового значения числовой переменной возможно, если данная строка изображает собой число. Тип результата автоматически приводится к числовому. Например: str pi = '3.1415926'; num x; x = pi; put x; результат: 3.1415926
!! Последовательность символов, не заключенная в апострофы и не объявленная, как переменная, считается везде, где возможно, строковой константой. Например: num i = 777; str a; a = blablabla + i; put a; результат: blablabla777
Результат логического выражения - целые 1 или 0 (истина или ложь).
При записи оператора цикла или условного оператора в одну строку, логическое выражение должно заканчиваться точкой с запятой, например: do i < n; i = i+1; od; if a == 0; exit; fi
При записи полной формы условного оператора в одну строку, else должно заканчиваться точкой с запятой, например: if a < b; a = b; else; b = a; fi
 
На выходе интерпретатора - результаты выполнения команд(ы) put. Всё, что не запятоя, не пробел, не переменная - выводится, как есть. Put без переменных выводит пустую строку. Если в конце списка переменных стоит запятая, то следующая put выводит данные в ту же строку. Все переменные в операторе put выводятся в одну строку. О разделителях вы должны позаботиться сами. Например: sep = space(1); put a, sep, b, sep, c или: put a,|,b,|,c
Весь полученный таким образом текст возвращается интерпретатором как длинная строка, включающая в себя символы Eol.
   
ОПЕРАЦИИ И ФУНКЦИИ  
   
Математические операции:  
   
* умножение
/ деление
^ возведение в степень
+ сложение (допустимо и для строк - означает их сцепление - конкатенацию)
- вычитание
% остаток от целочисленного деления
< меньше
<= меньше или равно
> больше
>= больше или равно
<> не равно
== равно
& и
| или
   
!! В командах сравнения отрицательные числа должны заключаться в скобки. Правильно: 2 < (-1) дает 0 - ложь. Неправильно: 2 < -1 дает < указывая на нераспознанную операцию.
   
Элементарные математические функции:  
   
rad перевод градусов в радианы
deg перевод радианов в градусы
sin синус
cos косинус
tan тангенс
asin арксинус
acos арккосинус
atan арктангенс
ln натуральный логарифм
log десятичный логарифм
exp экспонента
sqrt квадратный корень
ceil округление до целого в большую сторону
floor округление до целого в меньшую сторону
round округление до заданного количества знаков; например: round(3.1415926,2) даст 3.14
   
Генераторы псевдослучайных чисел:  
   
rand случайное число в диапазоне от 0 до заданного; например: rand(1) - случайное число между 0 и 1
randexp экспоненциально распределенное случайное число с заданным средним значением; например: randexp(5)
   
Функции работы со строками:  
   
lower перевод строки в нижний регистр
upper перевод строки в верхний регистр
trim удаление оконечных пробелов в строке
chars(b, n) строка, составленная из символа b, повторенного n раз; например: chars('*',5) даст строку '*****'
chr символ с указанным десятичным кодом; например chr(8721) даст символ ∑
len длина строки; например: len('qwertу') даст 6
pos(z, s) позиция подстроки z в строке s, если не найдено, то 0; например pos('rt','qwerty') даст 4
sub(s, k, d) часть строки s с позиции k длиной d; например: sub('qwerty',4,2) даст 'rt'
text возвращает содержимое указанного файла в виде строки текста; например: s = text('C:\Examples\Test3.txt')
words(f, name) создает нужное количество строковых переменных (массив) с общим именем name и помещает в них все слова из файла f; например, words('C:\Examples\Test3.txt','W') создает переменные: W.count - количество слов в файле, W.1 - первое слово, W.2 - второе слово... и т.д.
lines(f, name)) налогична words, но запоминает все строки файла f в массиве переменных name
split(s, name, sep) аналогична words, но вместо файла на части "режется" и запоминается в массиве строка s по символу-разделителю sep; например: str s = 'abc|123|pi=3.14'; split(s,'W','|')
StrMatch(s, mask) возвращает 1 или 0 в зависимости от того, найдено ли совпадение со строкой s по маске mask или набору масок, разделенных символом |, например: s = 'британские ученые сделали открытие'; StrMatch(s,'британск*|учен*') даст 1
StrReplace(s,sour, repl,case) заменяет в строке s подстроки sour на repl, case = 0 - не учитывать регистр, case = 1 - учитывать регистр; например: StrReplace('qwertyQwerty','qwe','U',0 ) даст UrtyUrty,  а StrReplace('qwertyQwerty','qwe','U',1) даст UrtyQwerty
body удаляет из слова все знаки препинания: например: s = '({["Громовержец!?.."]})'; body(s) даст 'Громовержец'
   
Специальные функции:  
   
filesize размер указанного файла в байтах
time() строка, содержащую системные дату и время; используется без параметров
mem(varname, t, value) создает переменную с  именем varname, типом t и значением value; например: mem('Delta','N','123') создает числовую переменную Delta, равную 123; mem('FIO','S','Иван Петрович Сидоров') создает строковую переменную
see возвращает значение указанной переменной; например: see('FIO'); с помощью этой функции можно обращаться к элементам стандартных массивов, создаваемых функциями words, lines. split; например: see(W.+i) - это i-й элемент массива W
HomeFolder(f) возвращает имя папки f в рабочем каталоге Demagog'a с добавлением полного пути; например, HomeFolder('dic') даст что-то вроде этого: 'D:\0 - Unicode\Demagog-U\dic\' (в зависимости от того, где находится Demagog на вашем компьютере); HomeFolder('') вернет полное имя рабочей папки Demagog'a
   
Функции сообщений и диалога:  
   
ShowMessage выводит на экран сообщение; например: ShowMessage('Расчет закончен')
MessageDlg выводит на экран вопрос, возвращает 1, если ответ был "да" и 0, если ответ был "нет"; например: answer = MessageDlg('Начать расчет?')
InputBox(title, prompt,def) отображает окно ввода данных с заголовком title, названием переменной prompt и значением по умолчанию def для вода строковой переменной; например: str nazvanie; nazvanie = InputBox('Составление сборника','Введите название','СБОРНИК ')
GaugeInit(min, max) инициализирует индикатор "бегущая строка"
Gauge(i) отображает индикатор "бегущая строка" при изменении i от min до max
OpenDialog(multiselect) отображает диалог открытия файла, возвращает полное имя выбранного файла, если multiselect = 0; или строку из полных имен выбранных файлов, разделенных символом |, если multiselect = 1
   
Функции, не возвращающие значения, и предназначенные для управления программой Demagog:  
   
WActive(i) делает активным окно i (i от 0 до 15), например: WActive(7)
WNew(i, newtext) загружает в окно i текст из строки newtext, прежний текст в окне уничтожается; например: WNew(0, 'Лог-файл')
WOpen(i, filename) загружает в окно i текст из файла filename
WAdd(i, j, delim) добавляет к тексту в окне i текст из окна j, используя строку-разделитель delim; например: delim = chr(13)+chr(10)+chr(13)+chr(10); WAdd(1, 9, delim); при этом тексты разделятся пустой строкой
WSave(i, filename) сохраняет текст в окне i в файл filename
WReplace((i, find, rep, case) в тексте в окне i заменяет все подстроки find на repl; с учитом регистра при case = 1 и без учета регистра при case = 0
WFilter(i, j; dicname) в окне i выполняет замены по словарю из файла dicname, результат помещает в окно j
WLiterary(i) придает тексту в окне i аккуратный вид
WSeries(i) создает сериал из текста в окне i
WAuduo(i) записывает в аудио-файл текст в окне i
WSpeak(i) читает вслух текст в окне i
SetSAPI(k) назначает драйвер синтеза речи, k = 4 или 5; например: SetSAPI(5) задает драйвер SAPI5
SetVoice(vname, vspeed) назначает голосовой движок по его названию (или части названия) vname и установить скорость чтения vspeed; например: SetSAPI(5); SetVoice('Nicolai',1)
SetCodec(codec, commline, audiotype) назначает пользовательский аудио-кодек по имени исполняемого файла codec, командной строке commline (где %1 %2 - входной и выходной аудио-файлы) и типу выходного аудио-файла audiotype; например: SetCodec('fastencc.exe', '%1 %2 -br 48000','mp3')
CSpeak() читает вслух текст из буфера обмена
   
   
(c) Венедикт Ли, 2011-2015