|
ОПИСАНИЕ ВСТРОЕННОГО ИНТЕРПРЕТАТОРА |
|
| Арго - так называется встроенный интерпретатор в программе 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 | |