Полное справочное руководство для версии Script 2.
Это руководство относится к языку Script 2. О том, как использовать компилятор до 2014 года, читайте в руководстве Script 1.
Язык полностью реализован в компиляторе Script в JavaScript.
Включение в веб-страницу возможно только с компилятором Script в PHP или JavaScript.
Домашняя страница: https://www.iqlevsha.ru/
Новый язык программирования Script можно использовать с интерпретатором и компиляторами.
Для каждого компилятора существует версия Windows и Unix.
Цель языка - быть простым, естественным и, следовательно, снизить риск ошибок. Скриптол означает: «Scristwriter Oriented Language» или «язык сценариста» на французском языке. Это универсальный язык, созданный для создания динамических веб-страниц, скриптов и приложений с графическим интерфейсом. Это может быть также языком сценариев для приложений, обрабатывающих или создающих документы XML. Скриптол может быть вложен в HTML-страницу и преобразуется в ту же страницу с PHP-кодом, готовым для Net и полностью переносимым. Язык определялся по семи правилам, описанным на сайте.
Обратите внимание, что символы [], включенные в синтаксис инструкций, не являются частью синтаксиса языка и указывают опционный элемент, за исключением индексов и интервалов, которые точно используют эти символы.
Для запуска командной строки необходимо установить Node.js. Этот параметр устанавливается автоматически после загрузки в Windows. В Linux необходимо ввести следующую команду:
sudo apt-get install nodejs
Или эквивалент, в зависимости от распределения .
Для компилирования программы в JavaScript команда:
solj [options] nomfichier
Если источник уже компилирован, интерпретируется программа JS, иначе она компилируется перед интерпретацией, если нет ошибки.
Пока у источника есть ошибки, новая команда «solp nomficher» скомпилирует ее. Если источником является HTML-страница, она не запускается после компиляции.
Параметры компилятора:
aucune: compile un script en PHP/JavaScript ou le lance si déja compilé. -w compile du code inclus dans une page et crée un fichier HTML. -j génère un fichier JavaScript à inclure dans une page HTML. -r force l'exécution. Compile si besoin seulement. -c recompile le fichier et fichiers inclus. Le programme n'est pas lancé. -v affiche plus d'informations lors de la compilation. -q pas de message de compilation.
Эти буквы можно объединить в один вариант. Таким образом, -be эквивалентно -b -e.
В Powershell команда:
invoke-expression "solj [options] filename"
Файл solj.ini может указать путь к файлу скриптол.js и расширение созданного HTML-файла. Например:
lib="c:/scriptolj/scriptol.js htmlext=".php"
В Windows команда:
solp [options] nomfichier
Те же параметры, что и в JavaScript .
В Powershell команда:
invoke-expression "solp [options] filename"
Источник Script - это просто текстовый файл, содержащий команды inside, по одной за строку.
Примеры :
print x * 2 print x + (y / 2)
С помощью текстового редактора, например Advanced Editor, введите следующую строку:
print "Bonjour le monde"
Сохранить в файле bonjour.sol.
При работе в окне командной строки (MS-DOS под Windows, консоль под Unix) просто введите :
solj bonjour ...ou solp bonjour
Также можно построить исполняемый файл с помощью команды :
solc -bre bonjour
и запустите созданную программу bonjour.exe.
Есть возможность работать как с редактором, так и с консольным окном.
Файл проекта не требуется.
В Java или PHP программа является источником, который включает другие источники. Скриптол сохраняет эту структуру.
Источник скриптола должен иметь инструкцию include для каждого файла, содержимое которого используется. Компилятор вычисляет зависимости на нескольких уровнях включений и среди взаимных включений.
Файл Script должен иметь расширение «sol», и будет преобразован в php-файл расширения, или cpp и hpp, или исполняемый файл.
Это форма источника, у нас будет сценарий или приложение.
Режиссерский сценарий
Источник сценария - это последовательность инструкций и определений функций или классов. Он может включать другие файлы, содержащие объявления функций, переменных, классов.
Применение
Файл приложения содержит только объявления функций, переменных и классов. Главный источник - это тот, который проходит в командной строке компилятора, он должен содержать функцию «main» и команду вызова этой функции, как показано ниже :
int main() ... instructions ... return 0 main() // lancement du programme.
Скриптол можно определить как:
Чувствительность к регистру:
Идентификаторы:
Числа:
Это зависит от целевого языка.
Преобразование (cast):
Объект-ориентированный:
Ориентированный на XML:
Реактивное программирование
Чтобы код Script можно было скомпилировать в PHP на HTML-странице, он должен быть включен в следующие теги :
<?sol ... code scriptol ... ?>
Последняя строка сценария Script должна быть закончена точкой с запятой или разрывом строки перед символом?>
Тестирование HTML-страниц Если ты установил на компьютер такой сервер, как Apache или Xitami или Windows Server, и настроил его на распознавание расширения php, твой код будет обработан как в Интернете, после компилирования в PHP. В противном случае он перенаправит вас в тестовый файл. HTML динамической страницы, а затем выполнить PHP код :
solp -w mapage
php mapage.php > test.HTML
Для компиляции кода Script в JavaScript на HTML-странице поместите его в следующие маркеры:
<scriptol> ... code scriptol ... </scriptol>
Инструкция заканчивается точкой запятой или концом строки. Когда оператор превышает ширину строки, он объединяется со следующей строкой, если она заканчивается запятой, оператором или любым другим символом, который не может завершить инструкцию. Для продолжения операции в следующей строке символ не требуется. Несколько инструкций в одной строке разделяются точкой с запятой. Это может быть полезно, если ты помещаешь код Script на HTML-страницу и редактор соединяет строки !
Авторское право: Символ # помещается в начале строки с комментарием в той же строке. Этот тип комментария остается в целевом коде.
Следующие комментарии исходного кода не сохраняются на целевом языке:
//комментарий идет от символа до конца строки.
/ * и */содержат комментарий по нескольким строкам.
Язык Script никогда не использует один и тот же символ для концептуально разных целей.
+ addition - sousctraction * multiplication / division = opérateur d'assignement. < moins que. > supérieur à. <= inférieur ou égal. >= supérieur ou égal. ; est un terminateur d'instruction. , sépare les éléments d'un initialiseur ou d'un tuple. : attache un corps à une en-tête, une valeur à une clé... . associe la référence d'une méthode à un objet. () regroupe des sous-expressions, les paramètres d'une fonction. .. sépare les limites d'un intervalle. -- intervalle avec la limite supérieure non incluse. [] contiennent un index ou un intervalle. ? sépare condition et action dans une structure d'une seule ligne. <> opérateur de différence. & et binaire ou intersection de tableaux. | ou binaire ou union de tableaux. << décalage à gauche. >> décalage à droite. and et logique (sur valeurs booléennes). or ou logique. not négation logique. mod modulo (C utilise %). ^ xor. # commentaire de copyright. // commentaire de code source sur une ligne. /* */ commentaire sur plusieurs lignes. ~~ début et fin d'un bloc de code cible à insérer. ` début et fin d'un template, chaîne sur plusieurs lignes
Идентификаторы - это имена переменных, функций и объектов. Они начинаются с буквы, за которой следуют буквы, цифры или символы подчеркивания. Их нельзя отличить по регистру: нельзя дать одно и то же имя двум разным объектам, один заглавными буквами, другой - строчными. Ключевые слова - это зарезервированные слова языка, они в нижнем регистре .
Примитивы являются базовыми объектами. Когда они являются параметрами функции, функция использует копию ее содержимого, значения и не изменяет их оригиналом, в то время как она использует псевдоним для других объектов.
Примитивы Скриптола таковы :
var élément générique de array ou valeur de dict. number toute sorte de nombre (jusqu'au double du C++). int un nombre arrondi à la partie entière sur 32 bits. integer identique. natural entier non signed de 64 bits sauf 0. real un nombre avec des décimales. boolean la valeur vrai ou faux. text une chaîne de caractères. array une liste dynamique indexée d'objets. dict une liste associative formée de couples clé:valeur. react une variable reactive. file un fichier.
При импорте С используются другие специальные типы :
byte type externe de C. cstring utilisé dans les déclarations externes en langage C (traduit par char *).
Примитивы имеют конструкторы, как и другие объекты с разными параметрами, что позволяет использовать их для преобразований типа.
Синтаксис:
int(int | number | text)
Примеры :
int("123") ...représente le nombre 123 text(10) ...représente la chaîne "10".
Примитивы - это переменные, если они явно не объявлены постоянными, с ключевым словом const.
Буквенные числа пишут :
123 entier (int) 123n naturel (natural) 123.0 réel (real) 0.123 réel (real) 1.2e10 réel (real) 0xf8 hexadécimal 0b011 binaire true/false booléen (boolean)
Пишется литературный текст: «унтекст» или «унтекст ».
Пример :
print "abc$xyz" print 'abc$xyz'
в обоих случаях отображается abc $ xyz .
Коды выпуска
Для символов, которые нельзя поместить непосредственно в текст, используется специальный код :\Например, для отображения гильзы напишем: "abc\" def "
\" insère un guillemet double. \' insère un guillemet simple. \n insère a retour à la ligne. \t insère une tabulation. \\ insère l'anti-slash lui-même.
Предположим, вы хотите присвоить переменную a именно с этим текстом: моя «симпатичная» машина. Вы не можете поставить его в кавычки: a = «моя «красивая» машина» Компилятор не будет знать, как с ним обращаться! Специальный код используется для того, чтобы сказать, что кавычки находятся в тексте, а не ограничивают его, это\a = "ma\" jolie\" автомобиль" Вы также можете чередовать типы кавычек: a = "ma 'jolie" автомобиль "или a =" ma "jolie" автомобиль "
Мульт-линии
Текст также может быть распределен по нескольким строкам в символах ', например, в ECMAScript 6.
Пример:
x = ` ligne 1 ligne 2 `
Возврат на линию может быть прямым или введенным кодом выпуска.
x = "un\ndeux" ...valide x = "un deux" ... non valide x = `un deux` ... valide
Если строка заключена в двойные кавычки, то последовательности символов, начинающиеся с $, являются именами переменных .
text xyz = "def" text t = "abc$xyz"
Присваивается строка «abc», за которой следует содержимое переменной abc. Это так называемая строковая интерполяция.
Символы {} имеют особое значение для интерпретатора PHP, и их следует избегать в двойной строке с символом\.
Тексты в простых кавычках, которым предшествует $, вообще не интерпретируются.
text t = 'av$er\n'
показать: av $ er\n
Объявление переменной имеет форму :
type nom [ = valeur ] int x text t = "demo"
Пока все они одного типа, можно объявить и инициализировать сразу несколько переменных.
Синтаксис :
type nom [= value], name [= value], etc... int x = 1, y, z = 2
Нельзя смешивать несколько парней в одно заявление. Множественные назначения, как это описано ниже, в одном заявлении делать нельзя.
Следующая фигура недопустима :
int x, y = 0, 0 // non valide
В то время как признается следующее:
text a = "a"
text b = "b"
text c, d
c, d = [a, b]
Модификатор const указывает на примитив, значение которого не может быть изменено. При объявлении необходимо назначить значение.
Синтаксис и примеры объявления констант :
const type nom = valeur const int X = 1 const boolean B = true const text T = "texte quelconque"
Константы обычно заглавными буквами.
Есть предустановленные константы, которые являются ключевыми словами языка:
true correspond à une expression vraie. false le contraire. zero la valeur 0. nil objet non trouvé dans une séquence (Not In List)ou symbole de suppression. null assigné à un objet quand il n'est pas encore initialisé.
PI - заданная константа для представления математического символа.
Nil означает «не в списке», в то время как null означает «не имеет значения» или «объявлен, но не определен».
Нил - не настоящая ценность, а скорее конструкция языка. При чтении он указывает на то, что объект не найден при поиске в списке. Запись позволяет удалить элемент или интервал из списка. Невозможно инициализировать переменную с помощью nil.
Обычные примеры:
array a = [1,2,3,4,5] a[1..3] = nil
Сейчас содержание таблицы составляет [1,5].
int i = "démo".find("x") if i = nil print "Non trouvé"
Так как «x» не находится в тексте «демо», появится сообщение «Не найдено».
Вот значения нила в разных контекстах...
При создании кода C++ nil заменяется следующими значениями :
boolean false int -1 natural -1 real -1 text "" array [] dict {} file null dir null objet null var selon le type du contenu.
При создании PHP-кода nil заменяется false для числа, на «» для текста.
Когда генерируется код JavaScript, nil стоит -1 для числа, «» для текста.
Ключевое слово null преобразуется в «null» в PHP, «NULL» в C++ и «undefined» в JavaScript;
Если идентификатору присваивается значение null, его нельзя использовать или использовать, пока ему не будет присвоено значение. Его можно сравнить только в одном условии с ключевым словом null.
Пример использования:
text a = null
Переменная «a» может быть назначена, но привязана только для сравнения с нулевым значением, иначе появится сообщение об ошибке.
Синтаксис простого назначения:
identifieur = expression
Назначенное значение должно иметь тип переменной :
int i = 10 int j = "343" ... incorrect
Однако строители примитивов позволяют делать преобразования.
Когда операция выполняется над переменной, и результат, назначенный той же переменной, можно упростить инструкцию, увеличив назначение (из одной операции).
Синтаксис увеличенного назначения :
identifieur opérateur expression
Например, добавить 10 к x и поместить результат в x. Вместо того, чтобы писать x = x + 10, мы напишем проще: x + 10
Возможные операторы: + - */mod <<>> & | ^ #
Примеры :
a = 1 ... donne à a la valeur 1. a + 1 ... ajoute 1 à a. x * y ... remplace le contenu de x par le résultat x * y. a * (x + 2) ... multiplie a par l'expression. a = a * (x + 2) ... comme ci-dessus. a & b ... remplace le tableau a par l'intersection des tableaux a et b.
Обратите внимание, что в тесте условий x + 10 просто возвращает результат добавления 10 к содержимому x, не изменяя x. В увеличенной инструкции этот результат присваивается x.
if x + 1 : ... ici x n'est pas modifié.
Кортеж значений может быть назначен группе переменных. Синтаксис и пример :
nom [, nom]* = expression [, expression]* x, y, z = 1, x2, 8
Число выражений справа должно соответствовать количеству выражений слева.
За исключением случая, когда справа находится только одно выражение, оно будет назначено каждой переменной в группе.
Обратите внимание, что функция может возвращать несколько значений и будет назначена группе переменных.
Примеры :
x, y, z = 0 a, b = mafonction()
Вместо кратного объявления множественное назначение может быть выполнено с переменными разных типов.
Пример :
int x text t x, t = 1000, "abc"
Множественное назначение может использоваться с элементами массива. Массивы имеют динамический размер, поэтому целевое число не должно соответствовать количеству элементов, а если массив имеет только один элемент, то будет назначена только первая переменная.
Пример :
x, y, z = array(1, 2, 3, 4)
Эквивалентно: x = 1, y = 2, z = 3 .
x, y, z = array(1)
Эквивалентно: x = 1.
Можно назначить несколько переменных одновременно с помощью: - значение или выражение.
- один массив
- значения диктанта (использовать метод values ()).
- вызов функции.
- кортеж значений или выражений, разделенных запятыми.
В случае массива или диктата, кортежа, функции, возвращающей несколько значений, переменные 1-n присваиваются элементам 1-n в одном порядке. Если число не совпадает, это ошибка.
Если функция возвращает только одно значение, то одно и то же значение присваивается всем переменным слева.
Можно назначить несколько переменных одновременно из нескольких других или одинаковых в другом порядке. Пример:
var a = "alpha" var b = "beta" a,b = [b, a] print a, b
Что покажет: бета, альфа.
Пример показывает, как обмениваться содержимым двух переменных, но это работает и при назначении разных переменных. На самом деле мы создали таблицу с двумя переменными и присвоили ей две переменные.
Операторы сравнения :
= (égal) < (inférieur) > (supérieur) <= (inférieur ou égal) >= (supérieur ou égal) <> (différent)
Оператор «in» проверяет наличие элемента в последовательности: текст в тексте, объект в массиве, значение в промежутке.
if "a" in line print "dans le texte" if x in 1..10 print "dans l'intervalle"
Двоичные операторы:
& (et) | (ou) ^ (ou exclusif) ~ (non) << (décalage à gauche) >> (décalage à droite).
Операторами массива являются :
& (intersection) | (union) ^ (complément d'intersection).
Прецедент
Унарные операторы имеют прецедент над бинарными операторами. Между операторами одинаковой арности предшествующие значения задаются скобками.
Выражение - это сочетание значений и операторов.
Арифметические выражения
Это арифметические значения или вызовы функций, объединенные с этими операторами:
+ - * / ^ puissance mod modulo, retourne le reste d'une division...
Пример:
print 100 mod 3 ... affiche 1 le rester de 100 divisé par 3.
Реляционные выражения
Арифметические выражения можно сравнить с помощью набора операторов :
= égal < inférieur à > supérieur à <= inférieur ou égal >= supérieur ou égal <> différent
Сравнение возвращает логическое значение: true или false (true или false). Это логическое значение может быть присвоено логической переменной или использоваться в качестве условия управляющей структуры, например «if».
Логические выражения
Логическое выражение - это сочетание логических значений или выражений (реляционных или логических) и логических операторов.
Логическими операторами являются:
and et or ou not non
Выражение «и» возвращает истину, если оба термина верны, если нет.
Выражение «or» возвращает истину, если одно из двух терминов верно, ложно, если оба являются ложными.
Пример :
boolean x = true boolean y = false if x and y print "vrai"; else print "faux" ... doit afficher faux not(x or y) ... est faux x and not y ... est vrai
Двоичные выражения
Бинарные операторы - это те, которыми пользуется большинство языков :
& et binaire | ou binaire ^ ou exclusif ~ négation binaire << rotation à gauche qui équivaud à multiplier par 2 >> rotation à droite qui équivaud à diviser par 2
Текстовые выражения
Текстовые операторы :
=, <, >, <=, >= comparaison de deux textes. + concaténation de deux textes. [] indexation, slicing ou splicing (voir chapitre Text). in teste si un text fait partie d'un autre.
Пример :
text t = "préfixe" print t + "suffixe" ...affichera: préfixesuffixe
Выражения динамических списков
Операторы списков (array, dict):
= < > <= >= <> compare les valeurs de deux listes. + concatène deux listes (des doubles peuvent en résulter). - enlève d'une liste les éléments d'une autre (sauf doubles). [] indexation, slicing or splicing (voir Array et Dict). in teste si un élément est dans la liste. & intersection. | union. ^ complément d'intersection.
Пересечение двух списков возвращает элементы, общие для обоих. Объединение двух списков возвращает все их элементы. Элементы, принадлежащие обоим, сохраняются только один раз. Если один из списков уже имеет дубликат, сохраняется только первый экземпляр.
Некоторые языки программирования устанавливают правила прецедента, поэтому, когда скобки опущены, известно, какой термин касается каждого оператора. Хотя прецедент был построен в парсере Script, ошибки сообщений будут отправляться, если скобки опущены, так как они необходимы для читаемости.
Единственный случай, когда предыстория допускается без скобок, это для унарных операторов: not, ~ Унарный оператор всегда применяется к следующему термину, поэтому для применения его к выражению нужно поместить в скобки. Пример:
if not a and b if not (a and b)
Оператор не связан с объектом «a» в первом, во втором - с отрицанием выражения.
В составных назначениях (см. ниже) первый оператор относится к переменной, которая должна быть назначена с выражением справа от нее.
Функция определяется с помощью интерфейса, указывающего, как ее вызвать, набора инструкторов, и заканчивается ключевым словом «return».
Требуется тип возврата и тип параметров. Используется «void», если функция ничего не возвращает.
Синтаксис:
type [,type]* nom ( paramètre [, paramètre]* ) [:] ... instructions ... return [expression [, expression]*]
Пример :
int multiply(int x, int y) int z z = x * y return z
Это можно написать проще:
int multiply(int x, int y) return x * y
Тело функции представляет собой список инструкций, включающих при необходимости инструкции «return».
Конец определения - это возврат с нулем, одним или несколькими значениями.
return return x return x, y, 5
Если функция возвращает несколько значений, она должна иметь несколько типов возврата и инструкция возврата к нескольким параметрам (в том же порядке, что и типы возвращения).
Пример:
text, int, int coordonnees(int num) int x = matable[num].x int y = matable[num].y return "coordonnées=", x, y
Вызов функции
Вызов функции может назначить ноль, одну или несколько переменных.
mafonc() a = mafonc() a,b,c = mafonc()
Когда функция имеет объекты в качестве параметров, имена параметров являются псевдонимами объектов, и любое изменение в функции фактически происходит на исходных объектах. По умолчанию примитивами являются копии и объекты псевдонимов. Изменить его можно с помощью модификатора: «псевдоним»: название примитива становится псевдонимом оригинала.
void mafonc(number x) x + 1 print x return void foncalias(alias number x) x + 1 print x return number y = 5 mafonc(y) print y ... doit afficher 6 puis 5 foncalias(y) print y ... doit afficher 6 puis 6.
Задав значение по умолчанию, можно задать параметр для вызова функции. Полный синтаксис интерфейса:
type [,type]* nom(type nom [= expression] [, type nom [= expression]]* )
Пример:
int increment(int x, int y = 1) x + y return x print increment(10, 5) ...affichera: 15 print increment(10) ...affichera: 11
Для замены отсутствующего параметра было использовано значение по умолчанию 1.
Если интерфейс функции имеет несколько arugments со значением по умолчанию, нельзя пропустить одну из них при вызове, не пропустив все следующие. Параметры не могут быть распознаны по типу.
Если ты хочешь написать функцию с переменным числом и типами параметров, то вместо этого нужно использовать массив или словарь.
Пример:
void param(dict parlist) taille = parlist["taille"] nom = parlist["nom"] valeur = parlist["valeur"] return
В этом примере переменные «размер», «имя», «значение» являются глобальными, и они назначаются содержимым диктанта в параметре.
Область - это уровень пространства видимости объявленных объектов. Функция открывает новую область для всех объявленных внутри переменных. Если функция находится в глобальной области, в функции отображаются все глобальные переменные, скомпилированные перед функцией.
Невозможно повторно записать в функцию переменную с тем же именем, что и глобальную переменную.
Если функция является методом класса, в функции отображаются все переменные, объявленные в классе перед функцией.
Объекты, объявленные в функции, видны в управляющих структурах внутри функции.
Интерпретатор PHP может не показывать сообщения об ошибках или предупреждениях, предшествуя вызову функции символа @.
Символ игнорируется бинарным компилятором.
@mafonction(x, y)
Полезно иметь возможность переключать параметры на программу из командной строки.
Скрипт Script (например, PHP) использует переменную PHP $ argv". Чтобы имитировать то, как C++ переходит от параметров к программе, создать функцию «рука» и вызвать её с $ argv в аргументе (и $ argc при необходимости):
int main(int argnum, array arglist) print argnum, "arguments" for arg in arglist print arg /for return 0 main($argv, $argc) // $argv and $argc sont des variables système. Elles sont assignés automatiquement.
Функция main либо не имеет параметров, либо имеет два:
int main() int main(int, array)
Тип возврата int является обязательным, если источник компилируется в двоичный файл .
Эхо
Отображает выражение или список выражений, разделенных запятыми, без пробелов между ними и без возврата к конечной строке (как при печати).
Синтаксис: Эхо выражения [, выражение]
Пример:
x = 5 y = 20 z = 1 echo "values", x, y / 2 echo z
На экране это будет выглядеть так:
значение 5101
Пример:
echo "demo", 5 echo "next"
отображение: demo5next
Печать
Более сложное отображение получается с помощью инструкции print. Выражения разделяются, и мы переходим к строке в конце инструкции.
Синтаксис: Печатное выражение [, выражение]
Пример:
print "demo", 5
отображение: демо 5
Простая инструкция print без выражения отправляет возврат к строке.
Пример :
Для ввода текста с клавиатуры используйте команду input.
Текст может отображаться перед вводом текста.
Пример:
text name input name print name
Пример:
input "who are you? ", name
Перед командой input должна быть объявлена переменная, которая должна быть текстом или числом любого типа.
Контрольные структуры:
if if else /if. if une instruction. if composite. for for /for. for une instruction. - options: in intervalle, in séquence. while while let. while une instruction. while forever do while do until. do /do condition. do case / else / always /do. enum enum simple. enum dictionnaire. error error /error. error une instruction.
Только для JavaScript:
to for /to to while /to to une instruction
Скриптол имеет другой синтаксис для управляющих структур инструкции или многострочных.
Управляющая структура одной инструкции имеет форму:
mot-clé-de-structure expression let instruction ou mot-clé-de-structure expression ? instruction ou mot-clé-de-structure expression instruction commençant par un mot-clé.
Нет другого маркера конца, кроме конца строки. Инструкция является базовой и не может быть другой конструкцией.
Инструкция «let» всегда является последней частью контролирующей структуры и может быть единственной. Символ «?» - это просто аббревиатура «let». Let требуется, если инструкция является назначением или вызовом функции, но опционально, если за ней следует ключевое слово. Если «else» или «let» завершает управляющую структуру в той же строке, инструкция должна быть закончена точкой с запятой.
Многострочная управляющая структура имеет форму:
nom-structure expression [:] ... instructions ... /nom-structure
Двухточечный символ не является обязательным (если только инструкция не находится в одной строке).
Пример с разделителями:
if a = b : print t ; /if
Условная управляющая структура от строки до фигуры:
if condition ? instruction ; else instruction
Это гласит: если истинное состояние? тогда действие; в противном случае действия
Структура if then else может быть написана в более краткой форме:
if expression ? action1 ; : action2
Примеры:
if a = 5 ? break if a < 5 ? print "moins que" else print "plus que ou égal" if a = 1 ? print "un"; else print "plusieurs"
Мульт-линии
Синтаксис:
if condition-booléenne [:] ... instruction ... else ...optionnel ... instructions ... /if
N.B.: Двухточечный символ является необязательным после условия, как точка с запятой после инструкции, но он требуется при соединении строк.
Пример:
if (x + y) > 8 print "> 8" print x else print "<= 8" /if if (x + y) > 8 : print "> 8" ; print x ; else print "<= 8"; /if
Конструкционный коммутатор С++ или Java не существует в Script, так как слишком ограничен и бесполезен (в Script). Он воспроизводится более мощным вариантом конструкции if, который может проверить любой тип переменной и несколько жанров сравнений.
Синтаксис:
if expression non-booléenne [:] operateur expression : instructions operateur expression : instructions ... else ... instructions ... /if
Не-логическое выражение - это переменная, литерал или любое выражение, которое не возвращает логическое значение true или false.
Ключевое слово «break» не помещается в конец группы, как в C. Разрыв приведет к выходу управляющей структуры, содержащей конструкцию if.
Допустимые операторы: =, <,>, <=,> =,! =, <>, in, else.
«else» здесь эквивалентен «default» коммутатора С.
Пример:
if a = 1: print 1 = 2: print 2 > 2: print ">2" else print "<1" /if if x in array(1,2,3): print "premier" in array(4,5,6): print "second" in array(7,8) : print "troisième" else print "autre" /if
Citter Control Structure проводит либо интервал целых чисел, либо массив и по очереди присваивает каждый элемент переменной.
Синтаксис для интервала:
for variable in début..fin [step s] [:] ... instructions ... /for
Начало, конец, и шаг (шаг) - это идентификаторы или литералы.
Шаг не является обязательным, значение по умолчанию - 1.
В интервал включается тонкая граница, если символ интервала - «».., а не если символ - «-».
Конец может иметь значение меньше начала, если присутствует «шаг» и содержит отрицательный шаг.
Переменная контейнера может быть объявлена в заголовке. В этом случае она локальна для контролирующей структуры.
Синтаксис для списка:
for variable in expression-tableau [:] ... instructions ... /for
В этом случае содержимое выражения просматривается, и каждый элемент присваивается переменной. Это выражение должно быть таблицей или комбинацией, создающей таблицу.
Примеры:
for i in 1..10 print i /for for w in montableau print w /for for w in arr1 + (arr2 & arr3[0..5]) print w /for
Короткий синтаксис инструкции:
for variable in liste let instruction-basique
Примеры:
for w in maliste let print w for x in 10..1 step -1 let print w + 10
Цикл для сканирования ассоциативной таблицы по значению. Это равносильно... из JavaScript, в то время как для.. in в JavaScript сканирует ключи.
for var v in d let print v // affiche les valeurs
Но ты можешь получить ключ и ценность:
for text k, var v in d let print k, ":", v // affiche clés et valeurs
Это также работает на простой таблице:
array a = (10,20,30) for int indice, int val in a print indice, ")", val /for
Будет показано :
1) 10 2) 20 3) 30
Управляющая структура while представляет собой условную петлю.
Синтаксис одной команды:
while expression let instruction
Стандартный синтаксис :
while expression [:] ... instructions ... /while
Пример:
int x = 10 while x < 20 print x x + 1 /while
Из петли выходит инструкция «break».
«Непрерывная» инструкция игнорирует все следующее и запускает новый цикл.
Этот синтаксис рекомендуется, чтобы избежать риска бесконечных петель.
Инструкция, которая изменяет значение протестированного выражения как условие итерации, перемещается после маркера/while с помощью команды «let».
Пример:
while x < 10 if (x mod 2) = 0 continue print x /while let x + 1
Непрерывная инструкция пропускает инструкцию let.
Нет эквивалента в C или PHP, так как непрерывная инструкция пропускает следующий код, включая приращение x, что приводит к бесконечному циклу.
Упрощенный и повторный синтаксис:
while condition ...instructions... let incrementation
Пример инструкции:
while x < 10 let x + 1 while x < 10 : print x; let x + 1
Условием петли while может быть ключевое слово «forever», и ты входишь в бесконечную петлю, из которой выходишь через брейк.
Блок инструкций между маркерами do/do - это новое пространство видимости, а инклоизированные инструкции вычитаются в зависимости от возможного условия.
Общий синтаксис:
do ... instructions ... /do [ condition ]
и/do условие может быть упрощено до «until».
Блок инструкций выполняется до тех пор, пока условие является ложным, и оставляется, когда условие становится истинным.
Синтаксис do until:
do .. instructions ... until expression do print x x + 1 until x = 10
Это мощная конструкция «паттерн-спичинга». Он содержит одну или несколько групп, за которыми следует необязательная «else» и необязательная «always». Выполняется только одна группа флажков, первая из которых удовлетворяет требованиям. Always всегда выполняется, else, когда не выполняется ни одно условие.
Синтаксис поля:
do case condition : instructions [ case condition : instructions ] [ else instructions ] [ always instructions ] /do [while expression]
- за условием следует двухочковый или конец строки. «else» и «always» тоже для гомогенизации, но необязательно. - выполняется только один флажок или нет, если выражение не распознано.
- группа else, эквивалентная «дефолту» с.
- группа always всегда выполняется после другого случая. - the end tag is/do or/do forever or/do while.
- команда forever или while делает структуру автоматом. Для того, чтобы выбраться, может понадобиться перерыв.
- Не следует ставить брейк в конце группы, как в С. Это покинет структуру, а не группу.
Примеры:
do case nom = "pussycat": print "c'est un chat" case nom = "flipper": print "c'est un dauphin" case nom = "mobby dick": print "c'est une baleine" else print "un autre animal" /do int state = ON do case state = ON: counter + 1 case state = OFF: break always state = getState() ` une fonction quelconque /do while forever
Автоматика, считывающая свое состояние с одного и продолжающая вращаться до тех пор, пока не будет обнаружено состояние OFF, созданное вызываемой функцией.
Маркер конца do может быть дополнен условием, while или forever.
Блок инструкций будет выполняться хотя бы один раз и до тех пор, пока кондиция верна.
Синтаксис:
do ... instructions ... /do while expression do print x x + 1 /do while x < 3
Варианты - до .../до... блок инструкций с флажками или без них. - do .../do while forever... бесконечная петля. - до .../до навсегда... упрощенная бесконечная петля. бесконечный цикл требует «разрыва», чтобы прекратить выполнение.
Команда для выхода из цикла.
Пример использования ключевого слова «forever» (навсегда), которое намеренно создает бесконечный цикл.
int x = 0 while forever print x if x > 100 break /if x + 1 /while
Когда x достигает значения 100, инструкция break приводит к тому, что программа прыгает за пределы/while, на инстутацию после структуры while.
Непрерывная
Эта вторая команда позволяет пропустить все инструкции из текущего положения, до конца структуры, так что начать новый цикл.
int x = -1 while x < 20 x + 1 if (x mod 2) = 0 continue print x /while
В этом примере отображаются только четные значения x, так как при обнаружении нечетного значения проверяется условие x mod 2 и выполняется непрерывная команда.
В этом примере я вставил приращение x в первую строку. Если бы это было размещено после продолжения команды, это привело бы к бесконечному закольцовыванию, поскольку было бы пройдено приращение. Синтаксис while.. Лет избегает этого.
Enum позволяет последовательно присваивать значения идентификаторам, а в Script он позволяет присваивать не целые значения - реальные или текстовые.
По умолчанию целое число присваивается с нуля и увеличивается для каждого идентификатора в списке.
Двойная точка используется для назначения определенного значения идентификатору, а знак равенства используется для перезапуска данного значения.
Синтаксис:
enum identifieur [ : value | = value ] [ identifieur ...]* /enum enum: Z, UN, DEUX, TROIS /enum
Это присваивает 0 Z, 1 UNE и так далее. Это эквивалентно:
const int Z = 0 const int UN = 1 etc... ou: enum: Z:0, UN:1, DEUX:2 /enum
Более сложный пример назначения разнородных значений и запуска последовательности:
enum Z : "a0", ... assigne a0 UN : "a1", ... assigne a1 TROIS, ... assigne 0 QUATRE : 3.15, ... assigne 3.15 CINQ = 5, ... assigne 5 et redémarre la séquence SIX ... assigne 6 /enum
Пример упрощенного синтаксиса в инструкции:
enum ZERO, UN, DEUX, TROIS
Синтаксис подсказки в тексте или таблице: [подсказка]. Индекс должен быть простым выражением без вложенных скобок. Простое выражение - это литеральное число, идентификатор, вызов функции или арифметическое выражение и должно быть вычислено как целое число.
Синтаксис интервала:
début..fin
Для указания списка заключены в квадратные скобки:
nom-liste[début..fin]
Начало и конец - целые выражения. Последний элемент включается в интервал, если не используется оператор: «-»
a[0 -- 100] équivaud à [0..99] a[x -- y] équivaud à a[x..y-1]
Анализ интервалов:
0..10 x..y x * 2 / 4 .. y + 10
Можно использовать интервал для:
- проверить, находится ли значение в диапазоне: if x in 10.. 100
- просканировать интервал: для x в 1.. 100
- извлечь часть списка: array b = a [x.. y]
- изменить часть списка: на [x.. y] = другой список
При индексировании списка нижний или верхний предел интервала может быть опущен.
Il y a trois moyens pour découper une liste: array a = array(x0, x1, x2, x3, x4, x5, x6, x7, x8) array b = a[..2] array c = a[3..5] array d = a[6..] On obtient trois tableaux avec ces contenus: b: (x0, x1, x2) c: (x3, x4, x5) d: (x6, x7, x8) On les affiche: b.display() c.display() d.display() On doit voir: array ( [0] => x0 [1] => x1 [2] => x2 ) et ainsi de suite...
Чтобы заменить интервал другим списком, достаточно присвоить:
a [3.. 5] = массив («a», «b», «c»)
Содержимое становится:
(x0, x1, x2, «a», «b», «c», x6, x7, x8)
С таким же синтаксисом подлистинг заменяется списком или элементом:
a [3.. 5] = «xyz»
Оригинальный чайный список become :
(x0, x1, x2, «xyz», x6, x7, x8)
Для удаления подлиста объявляется nil, «не в списке» (не в списке):
a [3.. 5] = нил
Убрали подлист 3.. 5, который есть (x3, x4, x5), получаем:
(x0, x1, x2, x6, x7, x8)
Можно проверить, принадлежит ли значение подлисту.
Пример:
array a = array("un, "deux", "trois") if "deux" in a[2..5] print "dedans"
Текст является основным объектом с методами и содержит строку.
Когда текст является аргументом функции, функция использует копию, а не псевдоним в исходном тексте.
Индекс может быть отрицательным в диапазоне, а не в индексации.
Синтаксис:
text s crée un texte. s = "str" initialise. s = s[i] prend un caractère. s[i] = s2 remplace un caractère, s2 a un seul caractère. s = s[i..j] prend une sous-chaîne, de i jusqu'à j inclus. s[i..j] = s remplace une sous-chaîne. s[i..j] = "" supprime une sous-chaîne.
Литеративный текст - строка символов, запятнанная одиночными или двойными кавычками.
Символ + может использоваться с текстами, и он представляет собой конкатенацию двух строк.
Пример:
text b = "préfixe" text a = b + "suffixe"
Содержание а будет: «приставка».
Retour Méthode Fonction text capitalize() met la première lettre en majuscule. int compare(text) compare lexicographiquement deux textes (ignore maj). retourne -1, 0, 1. text dup(int) retourne un texte dupliqué n fois. Ex: "*".dup(10). void fill(text, int) remplit avec le texte en argument dupliqué n fois. int find(text s2) retourne la position du texte s2 dans le texte, retourne "nil" si non trouvé. (tester si = nil car <> nil ne va pas en PHP) int identical(text) compare, différencie maj/min. Retourne -1, 0, 1 void insert(int, text) insère in text à la position donnée. boolean isNumber() retourne true si le texte contient un nombre. int length() retourne la longueur. text lower() met en minuscules. text ltrim() supprime blancs et codes de contrôle au début. text replace(ft, rt) remplace chaque occurence de ft par rt. void reserve(int) alloue la taille donnée pour utiliser comme buffer. array split(sep) découpe le texte en éléments séparés par sep. int toInt() convertit en entier natural toNatural() convertit en naturel. real toReal() convertit en réel. text toText() cast une chaîne littérale en text (pour C++). text trim() supprime blancs et codes de contrôle en début et fin. text rtrim() supprime blancs et codes de contrôle en fin. text upper() met en majuscules. text wrap(int size) mots non coupés.
Объявлены с типом: var.
Динамические переменные имеют методы всех других типов переменных, но не методы объявленных классов (см. exter). Когда переменная присваивается вару, для назначения содержимого типичной переменной требуется cast.
Методы вара :
Последовательность - это статический (текст) или динамический (массив или дикт) список.
Списки и последовательности имеют одни и те же операторы, кроме & и |. Операции в списках:
[] : indice, lecture ou modification de sous-liste. + : fusion de deux séquences. Ou ajoute un élément à une liste. - : supprime une séquence d'une autre, ou un élément d'une liste. = : comparaison de deux séquences. in : teste si un objet est dans une séquence. & : intersection de deux listes (donne les éléments communs). | : union sans doublons de deux listes.
В Script существуют два вида динамических списков:
array: (tableau) indicé par des nombres entiers. dict: (dictionnaire) les clés sont des textes.
Массив - это индексированный динамический список объектов или литералов.
Пустая таблица представлена [].
Дословная таблица - это список выражений, разделенных запятой и вставленных между [].
Переменная может быть элементом массива.
Конструктор начинается с ключевого слова «array».
Чтобы показать содержимое таблицы a, мы вводим a.display () и получаем что-то из фигуры:
array( 0 : un 1 : deux 2 : trois )
Конструктор массива имеет форму: array (значение, значение и т. д.)
Число параметров варьируется от 0 до n. Записывается пустой инициализатор: array ()
Пишется литературная картина: {... Значения...} Можно определить массив, назначив конструктор, литеральный массив или уникальное значение.
Синтаксис:
array a crée un tableau. array a = array() crée un tableau vide. array a = [] crée un tableau vide. array a = array(x, y, ...) crée et initialise un tableau. array a = {x, y, ...} crée et initialise un tableau. array a = array(8) utilise le constructeur. array a = 3 crée un tableau d'un élement.
Элементы массива могут быть любым выражением, за исключением логического выражения * * *. Если поместить истинное значение в массив PHP, каждый раз при использовании оператора «in» будет возвращаться истинное значение с любым искомым значением.
Таблица может быть объявлена без назначения содержимого и впоследствии заполнена:
array a a.push("un") a.push("deux") a.push("trois")
Элементы встречаются по их положению в таблице.
Примеры:
a[1] = "a" a[2] = "b" for x in a : print x ... doit afficher: a b
Элементы массива доступны целым числом.
Синтаксис:
a[n] lit l'élément ayant le numéro n. a[n] = x remplace l'élément à la position n. a[n] = nil efface un élément. a = [] efface le tableau entier. a[n].upper() appel d'une méthode sur l'élément n du tableau.
Пустой индекс означает текущий элемент :
a[] élément à la position courante.
Индекс может быть любым выражением, которое оценивается в целое число. Выражение не может содержать элемент массива.
a[10 + x / 2] valide. a[10 + b[5]] n'est pas valide.
Поскольку массив может содержать любой тип объекта или даже другие массивы, для чтения элемента потребуется динамическая переменная, если только он не связан с типом читаемого элемента.
array a = [ x, "two", 3 ] var x = a[1] utilisation de var pour lire l'élément de type inconnu. text t = a[2] int i = a[3]
При добавлении элемента за пределы предельного значения он помещается в таблицу на последнем месте.
При назначении элемента со следующей инструкцией содержимое изменится в зависимости от целевого языка :
a[1000] = "x" En PHP et JavaScript: array( 0 : un 1 : deux 2 : le dernier 1000: x ) En C++: array( 0 : un 1 : deux 2 : le dernier 3: x )
В PHP индекс 1000 является только временным и изменится, как только инструкция изменит таблицу.
Инструкция в форме a [n] = x служит для изменения значения данного индекса, не следует присваивать таблицу таким образом, которая подходит только словарям (dict), как показано ниже.
Содержимое таблицы может просматриваться итератором.
На первый элемент указывают методом begin (), или на последний с end (), текущий элемент получается пустым индексом фигуры [].
begin() pointe sur le premier élement et retourne sa valeur. end() pointe sur le dernier élement et retourne sa valeur. inc() déplace sur l'élément suivant. Retourne la valeur pointée avant, ou nil au-delà du dernier élément. dec() déplace sur l'élément précédant. Retourne la valeur ou nil. index() retourne l'index de l'élément pointé. value() retourne la valeur de l'élément pointé. [] indice de l'élément courant. nil signifie "not in liste" et est retourné par différentes fonctions quand aucune valeur ne peut être retournée.
Пример использования таблицы a :
a.begin() ` déplace sur le premier élément while a[] <> nil ` teste si la fin de liste est atteinte print a[] ` affiche l'élément actuellement pointé a.inc() ` déplace sur l'élément suivant /while
В порядке убывания :
a.end() while a[] <> nil print a[] a.dec() /while
После создания таблицы можно применить различные функции списка или стека...
a.push("item") ...ajoute un élément à la fin de la liste a.unshift("item") ...ajoute un élément au début de la liste a.pop() ...lit et enlève le dernier élement a.shift() ...lit et enlève le premier élement
Таким образом, можно читать и удалять элементы таблицы с помощью следующих инструкций:
print a.shift ()
Интервал ограничен интервалом позиций.
a[pos..fin] la rangée entre "pos" et "fin" inclus. a[..fin] du début jusqu'à la position "fin". a[pos..] de la position "pos" à la fin du tableau. a[..] prend le tableau entier (peu utile). a[pos..fin] = nil supprime une rangée d'éléments. a[pos..fin] = b remplace une rangée par un tableau/élément (id).
Вместе с операторами + и - можно добавить или удалить элемент или группу элементов.
Пример:
array a = array("un", "deux") array b b = a + array("trois", "quatre") maintenant le contenu de b est de quatre éléments. a = b - array("un", "quatre") maintenant le contenu de a est: ("deux", "trois").
На массивах можно использовать только арифметические операторы + и - с оператором принадлежности «in».
Этот оператор может использоваться для проверки того, содержится ли значение в списке (массив, диктант или даже текст), а также для просмотра содержимого.
Синтаксис и примеры:
if variable in array for variable in array if x in a : print "dedans"; /if if x in array(1,2,3) : print "dedans"; /if for x in a print x for t in array("un", "deux", "trois") print t
Двоичные операторы динамических списков
В динамических списках (array или dict) можно использовать двоичные операторы перекрестка и объединения. Пересечение двух списков возвращает только те элементы, которые одновременно входят в оба списка. Объединение двух списков - это новый список, состоящий из элементов первого, плюс те из второго за вычетом тех, кто уже входит в первый.
& intersection | union ^ complément d'intersection a = array(1, 2, 3, 4) & array(3, 4, 5, 6) fait que a contient (3, 4).. a = array(1, 2, 3, 4) | array(3, 4, 5, 6) fait que a contient (1, 2, 3, 4, 5, 6).
Метод map, реализованный в JavaScript и PHP, позволяет последовательно применять функцию к каждому элементу массива и, возможно, возвращать новый массив. Пример:
int mapfun(int x) return x * 25
b = [1,2,3,4,5]
print b.map(mapfun)
Если ты хочешь применить функцию сразу к нескольким массивам, или к диктантам, ты используешь индекс. Пример :
for text k, var v in d1 d1[k] + d2[k] /for
Для каждого элемента добавляется содержимое ассоциативного массива d2-d1.
Используя функцию, имеет два параметра:
array d1 = [1,2,3,4,5]
array d2 = [10, 20, 30, 40, 50]
int mapfun(int x, int y) return x + y
for int i, var x in b print mapfun(d1[i], d2[i])
Количество измерений не ограничено. Для двухмерной таблицы синтаксис для...
- доступ к элементу: x = nomarray [i] [j]
- изменить элемент: nomarray [i] [j] = x
Для создания элемента синтаксис :
nomarray[i] = array() nomarray[i][j] = x ou nomarray[i] = array(x)
Невозможно создать элемент непосредственно в несуществующем подчиненном массиве. Индексы i и j предполагают, что уже существуют i и j элементы.
Язык может проводить сравнения между массивами чисел со всеми реляционными операторами. Рассматриваются две таблицы разных размеров.
Между двумя текстовыми таблицами или другими объектами можно проверить, идентичны они или отличаются. Для других сравнений нужно определить собственный алгоритм.
Нам нужно знать, как изменяются целые ключи массива в PHP в зависимости от операций, которые можно выполнить. Это важно для понимания ассоциативных таблиц и избежания многих ошибок.
После каждой операции отображается содержимое.
array a = [] array () a.push("un") array ( [0]=> un ) a + array("deux", "trois", "quatre") array ( [0]=> un [1]=> deux [2]=> trois [3]=> quatre ) a.shift() ... le premier élément est supprimé et les clés sont renumérotées. array ( [0]=> deux [1]=> trois [2]=> quatre ) a[1000] = "mille" array ( [0]=> deux [1]=> trois [2]=> quatre [1000]=> mille ) a.unshift("x") ... toutes les clés sont renumérotées, même la clé 1000. array ( [0]=> x [1]=> deux [2]=> trois [3]=> quatre [4]=> mille ) Créons deux nouveaux tableaux: array a = array("un","deux") array b = array() b[1000] = "mille" a + b Les clés sont renumérotées. array ( [0]=> un [1]=> deux [2]=> mille )
Если заменить a + b на a.push («тысяча»), результат будет таким же.
Итераторы еще не реализованы компилятором JavaScript, также не распознаются методы begin, dec и т. Д.
Retour Nom Action var begin() pointe sur le premier élément. var dec() retourne un élément et décrémente le pointeur. void display() affiche le tableau. var end() pointe sur le dernier élément. boolean empty() return true si le tableau est vide. int find(var) recherche un élément, retourne l'index ou nil. int findLast(var) recherche un élément à partir de la fin. var inc() retourne un élément et incrémente le pointeur. int index() retourne l'index de l'élément pointé. void insert(int, var) insère un élément à un index entier (pas un text). text join(text sep) convertit en text avec le séparateur donné. text key() retourne la clé de l'élément pointé. boolean load(text nom) charge un fichier dans un tableau ("file" de PHP). var min() retourne la valeur la plus faible. var max() retourne la plus forte valeur.
array map(fonction) applique une fonction à chaque élément et retourne un nouveau tableau. void pack() rend les éléments du tableau consécutifs. var pop() lit et supprime le dernier élément. var pop(int) lit et supprime l'élément à la position donnée. void push(val) ajoute un élément à la fin. var rand() retourne un élément à une position aléatoire. array reverse() retourne la liste en ordre inversé. var shift() lit et supprime le premier élément. int size() retourne le nombre d'éléments. void sort(int) trie les valeurs en ordre ascendant. void rsort(int) trie les valeurs en ordre descendant. void store(text nom) sauve le tableau dans un fichier. Ajouter false en argument pour ne pas ajouter de code eol. number sum() calcule la somme des éléments. text toText([text]) convertit le tableau en chaîne avec code de séparation en option. array unique() retourne le tableau sans valeur en double, la première est gardée. void unshift(var) insère un élément en première position.
Метод выходит из массива имеет необязательный аргумент: 0 для буквенно-цифровой классификации (по умолчанию в JavaScript и PHP), 1 для цифровой классификации.
Диктант - это дымамический список ключевых и ценных пар. Ключи - это всегда тексты. Значения могут быть любым объектом.
Ключ и значение могут быть переменными. Формат ключевой пары и значения:
clé:valeur
Пустой диктант представлен как {}. Литеральный диктант - это список пар, разделённых запятой, и загибающихся между {}.
Вместо таблицы диктант создается повестками:
d[k] = "b" d["un"] = "element 1"
Даже если JavaScript поддерживает цифровые ключи, заключенные в кавычки, поэтому рассматриваемые как тексты, это приводит к непредсказуемым результатам при смешивании их с буквенными ключами. Так что нужно избегать смешения парней.
Диктант можно создать из литерала или конструктора.
Синтаксис:
dict d // crée un dict. dict d = {x:v, y:w,...} // crée et initialise un dict. dict d = {} // crée un dict vide.
Значения могут быть любого типа объекта.
Ключ может быть переменной, а значение - выражением.
Пример:
text k = "a" text v = "b" dict d = {k : v} dict d = {k : v + "x".dup(4) + 20.toText()}
Этот пример записывает в dict d «bвсе 20» с ключом «a».
Значения в диктанте доступны текстовым ключом.
Синтаксис:
d["clé"] prend le premier élément avec la clé "clé". d[clé] = valeur remplace une valeur ou ajoute un couple clé-valeur si la clé n'est pas déja dans le dict. d[clé] = nil supprime un élément. d = {} efface le dict. Exemple: dict d d["program"] = "ce que l'on veut accélerer" print d["program"] affiche le texte ci-dessus.
Обычный способ использования словаря - с помощью ключей или итераторов. В некоторых случаях может пригодиться прямой доступ к интервалу значений.
- При добавлении элемента или другого диктанта к диктату, с помощью интервалов, push, unshift, PHP генерирует новый ключ для этого элемента. Новый ключ - это число.
- Если заменить интервал другим диктантом, некоторые элементы могут быть потеряны. Это происходит и при слиянии.
- Ключи диктанта, заменяющего интервал, не сохраняются.
Просмотры отображения:
Он должен представить все ключи и ценности в диктанте.
dict d = {"a":"alia", "b":"beatrix", "c":"claudia"} d.display() for k,v in d : print k, v; /for for
Retour Nom Action void display([flat]) affiche le dict indenté. Si l'argument est false, il n'est pas indenté. boolean empty() retourne true si le tableau est vide. int hasKey(text) retourne true si la clé existe. int find(var) recherche un élément, retourne l'index ou nil. dict getById(text) retourne un dictionnaire assigné à la propriété en paramètre. array getByName(text) retourne la liste des éléments dont l'attribut name a l'argument pour valeur. array getByTag(text) retourne la liste des objets donc l'attribut tag à l'argument pour valeur. array keys() retourne la liste des clés. void kSort() réordonne les index en préservant les associations. void load(text nom, [xml]) charge un fichier dans le dict. var pop() lit et supprime le dernier élément. var shift() lit et supprime le premier élément. int size() retourne le nombre d'éléments. void sort(int, bool) trie les valeurs en ordre ascendant. void store(text nom) sauve le dict dans un fichier. text toXML() convertit le dict en fichier XML dans une chaîne. void unshift(text,var) insère une paire clé valeur première position. array values() retourne la liste des valeurs.
Метод загрузки: Файл преобразуется из XML в dict, если имеет расширение xml, rss, svg или если дополнительный аргумент равен 1.
Типизированная таблица содержит уникальный тип объектов. Это гораздо эффективнее, чем общая таблица, потому что она индексируется, а не ассоциативно, и содержит непосредственно 32 или 64-битные объекты или указатели, а не динамические объекты (var).
Массив целых чисел в 100 раз быстрее стандартного массива для бинарных исполняемых файлов, но разницы в PHP нет.
Типизированные таблицы также динамичны, размер не предопределен и не ограничен.
Заговорщик типичной картины имеет форму:
type(...éléments...) Exemple: int(1, 2, 3)
Количество элементов от 0 до n.
При наличии одного элемента нет разницы между типичным конструктором массива и скалярным конструктором:
int(1) real(10r)
Это не проблема при назначении, так как из скалярного массива можно создать одноэлементный массив.
Синтаксис для объявления массива целых чисел:
int[] i = int(x, y, ....)
После объявления он используется как смешанный массив, но в него можно добавить только целые числа.
При создании можно назначить конструктора или литерала.
Одноэлементный конструктор эквивалентен конструктору целого числа. В одном выражении придется использовать литерал.
Примеры:
int[] x = int(5) int[] x = int(1,2) int[] x = y + int{5}
Заявления:
real[] r = real(1.0, 2.0, etc...) natural[] n = natural(1, 2, etc...) number[] n = number(1, 2.0, ...)
Для смешанной таблицы можно назначить типизированную таблицу:
Пример :
int[] i = int(...) array a = i
Но создать смешанную картину с типичным конструктором можно только:
Примеры:
[1,2,3] ... c'est un tableau mixte, avec des éléments entiers int[] i = [1,2,3] ... NON VALIDE, il faut plutôt écrire: int[] i = int(1,2,3) ... valide.
Примеры :
array a = int(1,2) ... NON valide array a = array(int(1,2)) ... NON valide
К вару можно назначить типичную таблицу.
int[] i = int(1,2) var d = var(i)
Для использования этого вара предусмотрены два метода:
arrayType () возвращает тип массива, содержащийся в var.
toList (int = 0) возвращает типичный массив содержимого.
Параметр является типом и требуется, когда var содержит смешанную таблицу, которую необходимо преобразовать в типичную таблицу.
Признанные типы:
$TYPE_INT tableau d'entiers $TYPE_REAL $TYPE_NATURAL $TYPE_NUMBER
Пример:
d = var(int(1,2)) if d.arrayType() = $TYPE_INT: int[] i = d.toList() = $TYPE_REAL: real[] r = d.toList() /if
Для совместимости с PHP добавление элемента в массив, превышающий текущий размер, имеет тот же эффект, что и добавление этого элемента, независимо от указанного индекса.
Например:
int[] i = nil i[10] = 10 équivaut à: i.push(10)
Складывание значений - правильный способ заполнения таблицы.
Если мы действительно хотим поместить элемент в заданное положение, мы должны заполнить таблицу нулевыми значениями...
for int k in 0 .. 10 let i.push(0)
Теперь можно поместить элемент в позицию 10.
- Метод нельзя применить непосредственно к указываемому элементу.
i[10].toText() .. non valide int x = i[10] x.toText() .. valide
- Функция PHP «array_diff» не работает, когда массив содержит объекты, поэтому вычитать такие массивы невозможно.
Файл является виртуальным объектом для обработки локальных или удаленных файлов.
Полное объяснение файловой системы см. в разделе «fopen» в руководстве C или PHP.
Объект очереди создается путем объявления экземпляра типа очереди. Файл на диске создается командой open. Она обеспечивает доступ к файлу в различных режимах, в зависимости от второго параметра метода.
Управляющая структура error позволяет проверить, был ли файл открыт правильно или нет.
Синтаксис для создания или открытия файла:
file nomfic declare un file. nomfic.open(path, mode) ouvre un fichier selon un chemin et un mode. Types de chemins: http://path fichier distant http. ftp://path fichier distant ftp. path fichier local. Modes: "r" lecture seulement, à partir du début. "w" écriture seulement à partir du début. "r+" lecture ou écriture au début du fichier. "a" ajout en fin de fichier en écriture seule. "a+" lecture à la position courante, ou écriture à la fin.
Методы файла:
retour méthode action int eof() retourne true quand la fin de fichier est atteinte. int open(text, text) crée ou ouvre un fichier. Positionne le drapeau "error". int close() ferme le fichier. text read(int) lit un bloc selon la taille en argument, retourne un text. text readLine() lit et retourne la ligne suivante dans un fichier de texte. int seek(int) va à la position donnée en argument, retourne 1 si ok. int size() retourne la taille du fichier. int time() retourne la date de dernière modification. int write(text) écrit le texte donné en argument, retourne la taille écrite. void writeLine(text) écrit le texte en argument.
Примеры:
file nomfic crée un objet file. nomfic.open("monfichier", "r") ouvre un fichier physique. nomfic.close() ferme le file. boolean b = nomfic.eof() assigne vrai à b si la fin de fichier est atteint. nomfic.seek(250) lecture ou écriture en sautant 250 octets.
Удаленные файлы в данный момент не управляются Скриптолом C и интерпретатором.
Файл можно читать по строкам или по бинарным блокам.
В первом случае используется метод readLine (), в противном случае используется метод read с размером блока в параметре.
Код конца строки в файле включен, и может быть удален методом rTrim ().
Примеры:
text t = nomfic.readLine() lecture d'une ligne de texte. text t = nomfic.read(1000) lecture de 1000 octets.
Метод write помещает содержимое текстовой переменной в файл. После открытия файла в режиме «w» или «a» и сохранения либо с нуля, либо в конце текущего содержимого каждый новый вызов write добавляет новый текст к концу.
Простой пример:
text nomfic = "monfic" // nom du fichier file sortie // nom de l'objet virtuel sortie.open(nomfic, "w") // ouvert en écriture error? die("impossible d'ouvrir " + nomfic) for text ligne in maliste // un tableau quelconque sortie.write(ligne) // enregistrer un élément /for sortie.close() // fermer le fichier
В программу скриптола можно вставить стандартный XML-код. Он будет преобразован в ассоциативную таблицу. Тег, содержащийся в другом теге, преобразуется в дикт как элемент другого диктанта.
Текстовое содержимое тега связано с ключом данных в генерируемой ассоциативной таблице.
Пример:
<xml id="car" speed=150 name="Spitfire">
<engine id="engine1" power=100 />
<passengers id="pass1" num=4 >
"Clara, Dana, Elisa, Farah"
</passengers>
</xml>
Этот код JavaScript генерируется компилятором:
var car={ "_00" : "car", "tag" : "xml", "speed":150, "name":"Spitfire", "engine1":{ "tag": "engine", "power":100 }, "pass1":{ "tag": "passengers", "num":4, "data":"Clara, Dana, Elisa, Farah" } };
Или этот PHP-код:
$car=[ "speed"=>150, "name"=>"Spitfire",
"engine"=>[ "power"=>100 ],
"passengers"=>[ "num"=>4,
"data"=>"Clara, Dana, Elisa, Farah" ] ];
Ассоциативная таблица также может быть преобразована в XML-документ в текстовой переменной, которую можно сохранить в файле:
car.toXML().store("fichier.xml")
После открытой инструкции конструктор error .../error должен выполняться в случае ошибки доступа. Но интерпретатор может остановить программу до достижения конструкции. В противном случае содержимое блока будет выполняться в случае ошибки .
Синтаксис:
xxx.open("nom fichier") error ...instructions... /error ou: xxx.open("nom fichier"); error ? action ou: xxx.open("nom fichier"); error action
Пример :
file monfic monfic.open("nom", "r") error? exit()
Если файл не найден или его нельзя открыть, программа останавливается.
Правила видимости относятся к основным процедурным языкам, а не к языкам сценариев.
Скриптол добавляет правила безопасности, он не позволяет присвоить одно и то же имя двум объектам во вложенных областях (например, в глобальной области и функции). Но одни и те же имена могут повторяться в последовательных местах.
Есть четыре уровня видимости: - глобальный, - класс, - тело функции, - и тело управляющей структуры .
Видимость переменной - это уровень, на котором она объявляется: Глобальный, класс, функция или ограниченный блок (if, do, for и т.д.), а также уровни содержимого.
Невозможно повторно записать переменную там, где она остается видимой. Она может быть повторно объявлена лишь в том случае, если ее область закрыта, в рамках последовательных функций или структур контроля.
Заголовок конструкции для является частью области блока.
for text t in a // t est visible seulement dans la boucle for. t = a.inc() /for
Часть let, завершающая петлю while, находится в области петли.
Аргументы функции находятся в области функции.
Внутри функции, если переменная ссылается перед назначением, она ссылается на глобальную переменную, если она существует, в противном случае это ошибка.
В методе класса, если он упоминается перед назначением, он ссылается на атрибут, если он существует, в противном случае это ошибка.
Глобальные переменные не видны в классе, кроме внешних переменных.
Внешние переменные (из PHP, Apache и т. д.) всегда находятся в зоне, так как над ними нет контроля. Поэтому ты должен знать их имя, чтобы не использовать его повторно, так как переменные Script превращаются в PHP-переменную с $ впереди.
При использовании внешних переменных в функции их нужно объявить «глобальными», так как компилятор ими не управляет.
Переменные и константы PHP могут использоваться в качестве переменных и констант Script при объявлении с ключевым словом «exter».
Внешние объявления, как и включенные, размещаются в заголовке файла.
Синтаксис для внешней переменной:
extern type identifieur extern const type identifieur
Никаких контрольных проверок типа или области внешнего объекта. В функции требуется «глобальное» заявление.
Пример:
global argv array a = $argv
Константа PHP объявляется как переменная с ключевым словом const:
extern const text PHP_VERSION ... print PHP_VERSION
Также можно использовать переменную PHP или C++ без объявления с приставкой $, за которой следует идентификатор.
Он может начинаться с подчеркивания.
$var_name $(constant_name) in PHP $constant_name. in C++
Функции PHP могут использоваться без объявления, чего не происходит с функциями C++.
Их также можно объявить ключевым словом exter. Значение по умолчанию определяется назначением. Это значение используется в C++, оно игнорируется PHP.
Синтаксис и пример:
extern type identifieur(... arguments...) extern text substr(text, int, int = 0)
Чтобы использовать методы классов PHP или C++, необходимо объявить эти классы и элементы, которые ты хочешь использовать.
Пример :
extern class phpClass int phpAttribute void phpMethod(int argument) ... déclaration ... /class /extern
C++ позволяет определять типы с директивами «typedef» и «# define». Эти новые типы можно интегрировать с выделенной инструкцией Script.
Пример: define uint
Это соответствует «# define uint unsigned int» в C++.
Ни один код не генерируется инструкцией define: Код C++ должен находиться в файле C++ для включения. Подробности см. в разделе «Неисправность инструкции».
Если вы хотите вставить PHP код непосредственно в вашу программу, используйте ~~ символы, чтобы определить начало и конец кода, который нужно включить.
Компилятор игнорирует содержимое, как если бы это были комментарии, но включает его в сформированный код, PHP, JavaScript или C++.
В одну программу можно вставить определенный код PHP или C++.
- Для вставки PHP-кода используйте:
require_once («lecode.php»)
Эта инструкция имеет эффект только для интерпретатора PHP, скомпилированного в C++, она игнорируется.
- Чтобы вставить код C++, используйте:
# include «лекодe.c + +»
Это будет составлено в C++, но для интерретора PHP это комментарий.
Класс - это структура, которая содержит переменные (атрибуты) и имеет функции (методы).
После определения класса он становится новым сложным типом языка, с помощью которого объявляются объекты, экземпляры класса. Атрибуты и методы объекта используются с командой фигуры:
x = objet.attribut objet.methode()
Описание класса начинается с ключевого слова «class» и заканчивается на «/class ».
Атрибуты (переменные) должны быть размещены перед элементами. Класс открывает пространство видимости. Глобальные переменные и определенные функции не видны внутри класса. Атрибуты и методы класса или экземпляра другого класса видны во всех методах класса с именем экземпляра в префиксе.
Пример объявления класса:
class voiture ...membres... /class
Пример класса с атрибутами и методами:
class voiture int lavitesse = 50 int passagers = 4 void voiture.vitesse(int i) int x = lavitesse * 2 return x /class
Пример экземпляра со ссылкой на методы:
voiture mavoiture print mavoiture.passagers print mavoiture.vitesse()
Конструктор - это метод с именем класса, который вызывается при создании экземпляра класса.
У него всегда есть тип возвращения «void», что означает: ничего.
Пример конструктора:
class Voiture int vitesse void Voiture(int p) // cette méthode est un constructeur vitesse = 0 //vitesse est initialisée lors de la déclaration d'une instance return /class
Синтаксис для создания экземпляра:
Nomclasse nomstance = Nomclasse (аргумент [, аргументы])
или:
Именной класс для конструктора без аргументов
Пример:
Voiture mavoiture = Voiture(60) ... crée une voiture avec une vitesse de 60 Camion moncamion ... equivalent à ci-dessous Camion moncamion = Camion()
Может быть удобно собрать в один класс все функции, касающиеся задачи, и объявить их «статичными». Эти функции можно вызвать непосредственно с именем класса без необходимости создания экземпляра.
Пример:
node, ext = Dir.splitExt(chemin)
Атрибуты также могут быть статическими. Статический атрибут является общим для всех наследуемых экземпляров. Статический метод не может ссылаться на атрибуты, поскольку они существуют только в экземплярах класса, если они также не являются статическими.
Другой метод не может быть вызван в теле статического метода.
Ключевое слово «static» должно предшествовать типу объекта.
Сообщение об ошибке выдается, когда статическая функция использует нестатический атрибут или вызывает другой метод.
Пример статических атрибутов и методов:
class Voiture static usine = "Xxx" static void denomme(text x) usine = x return /class Voiture.denomme("nom") Voiture.usine = "nom"
Статические атрибуты и методы также могут быть связаны с экземпляром:
Voiture maVoiture maVoiture.denomme("nom") maVoiture.usine = "nom"
Эффект будет таким же.
Класс может наследовать атрибуты и методы другого класса, если он объявлен подклассом другого класса.
Класс «имя» наследует атрибуты и методы «австрином». Это также работает со статическими атрибутами и методами.
Синтаксис объявления наследования:
class nom is autrenom
Пример:
class Vehicule int fuel void Vehicule() fuel = 100 return /class class Voiture is Vehicule int passagers void Voiture() passagers = 3 fuel = 50 return /class class Camion is Vehicule int charge void Camion() fuel = 200 charge = 1000 return /class Camion bibendum Voiture daisy print bibendum.charge attribut de la classe Camion print bibendum.fuel attribut de la superclasse Vehicule print bibendum.passagers mauvais! passagers non accessible à Camion! print daisy.passagers bon, passagers est attribut de Voiture
Метод можно переопределить с разными аргументами, как в одном классе, так и в производных классах. Тип возврата всех версий метода должен быть одинаковым.
Пример:
void ajoute(int x, int y) void ajoute(real x, natural y)
Просто нужно вызвать метод «добавить» с нужным типом аргументов, компилятор связывает соответствующее определение...
Для целевого языка C++ требуется, чтобы перегруженные методы имели тот же тип возврата, который сохраняется в Script.
Синтаксис для включения внешнего файла Script:
include "nomfichier.sol"
Скобки необязательны. Необходимы одинарные или двойные кавычки. Если ты хочешь напрямую использовать PHP-файл, а компилятор его не обрабатывает, используй расширение PHP.
Только файлы с расширением «.sol» будут обрабатываться компиляторами, если оно другое:
Примеры:
include "exemple.php" include "exemple.js
Файл PHP будет игнорирован кодом JavaScript и файл JS будет игнорирован кодом PHP.
При вставке кода скриптола на HTML-страницу содержимое включенного файла должно размещаться внутри тегов <script> и </script>, даже если файл содержит только код скриптола. Код, созданный для HTML-страницы, может быть другим.
Можно использовать функцию в качестве аргумента другой функции, определив ее как тип. Это работает только на глобальном уровне, а не в классе. После определения типа его невозможно переопределить.
1) определить функцию:
Пример:
int compare(int a, int b) boolean b = (a < b) return b
2) Использовать тип функции в качестве аргумента:
void mafonc(function a, int x, int y) print a(x,y) return
3) использовать родовую функцию:
Аргумент может быть исходной функцией или другой функцией с теми же аргументами и типами возврата.
mafonc(compare, 10, 8)
Синтаксис:
define NOVINTYPE
define NOVINTYPE as
создает новый тип, который можно использовать в аргументах внешних функций. См. примеры GTK по использованию внешнего типа.
Модификатор «as» приводит к тому, что новый тип не считается указателем. Так что использовать ее как примитивную, например, как уинт или гинт.
Скриптол может использовать функции PHP. Контроль аргументов и типов возврата функций PHP не осуществляется.
Просто нужно настроить php.ini, чтобы расширения были видны интерпретатору PHP.
Наиболее обычные функции PHP включены в библиотеку Script.
Для использования функций PHP-библиотек в исполняемой программе потребуется написать интерфейс для включения в проект. phpgd.h и phpgd.cpp - пример.
Библиотека функций в C или C++, может быть использована просто путем добавления файла «.lib» или «.a» или «.so» в список в файле конфигурации «.ini» или «.cfg».
Для отображения переменных и классов добавленного расширения компилятору необходимо записать файл, который будет включен.
Инструкция define позволяет создать тип для задания функции в качестве параметра другой функции.
Можно прямо объявить переменные C :
extern ~~extern char *message~~ pour le fichier d'en-tête. char *message pour la visibilité en scriptol. /extern ~~char *message~~ création effective de la variable C.
Эквивалентности:
C char * cstring void * object char ** cstring * unsigned char byte
- Имя функции funname в аргументе записывается как funname, см. define.
- Внутренняя функция не может использоваться в качестве аргумента. Она должна быть инкапсулирована в пользовательскую функцию.
- Если экземпляр объявлен в форме C++: NameClass, вместо этого необходимо создать указатель (в зависимости от формы C++: NameClass * instance ).
Эти функции являются общими для PHP, C, C++ и Script. Если имя PHP отличается, оно указывается в списке.
Полный список - в файле fun.hpp.
void die(text message) Affiche un message en quittant le programme. void exit() Quitte le programme. Peut afficher un message. number min(number, number) Retourne le plus petit de deux scalaires. number max(number, number) Retourne le plus grand de deux scalaires. const cstring plural(int x) Retourne le pluriel "s" si le nombre x > 0. array range(int x, int y) Génère un tableau des entiers compris entre x et y. cstring str(number) Convertit un nombre en chaîne de charactères. void swap(var, var) Echange le contenu de deux variables. text pad(text t, len l , text c [, int o]]) Complète un texte avec des espaces ou la chaîne de caractères donnée. t: text à compléter. l: longueur à atteindre. c: texte à ajouter, des espaces par défaut. o: option STR_PAD_LEFT, STR_PAD_BOTH, par défaut à droite. (Voir: str_pad)
Актерский состав
text chr(integer) Retourne le charactère pour une valeur ASCII. Ex: chr(32) retourne un espace blanc. int ord(text) Retourne la valeur ASCII d'un charactère. int intval(any) int doubleval(any) natural naturalval(any) text strval(any) Convertit un nombre en text. char *str(any) Convertit un nombre en chaîne de charactères C. boolean boolval(int)
Функции файлов (см. также методы типа File):
void exec(text) Passe une commande au système d'exploitation. boolean file_exists(text) Teste si le fichier dont le nom est en argument existe. number filesize(text) Retourne la taille. number filetime(text) Retourne la taille (utiliser la fonction date pour afficher). text filetype(text) Retourne "dir" ou "file". boolean rename(text, text) Renomme un fichier. Retourne faux en cas d'échec. void system(text commande) Passe une commande au système d'exploitation. boolean unlink(text) Efface un fichier. Retourne true si effacé. var require(text) Déclare un module externe (JavaScript seulement).
Функции каталогов:
boolean chdir(text) Change le répertoire courant. Retourne false si échec. boolean mkdir(text) Crée un sous-répertoire. Retourne true si créé. boolean rmdir(text) Efface un sous-répertoire. Retourne true si éffacé. text getcwd() Retourne le chemin répertoire courant.
Математические функции:
number abs(number) Retourne la valeur absolue d'un nombre. real acos(real) real asin(real) real atan(real) number ceil(number) Retourne le nombre arrondi à l'entier supérieur. real cos(real) real exp(real) number floor(number) Retourne le nombre arrondit à l'entier inférieur. number fmod(number, number) Return le modulo de deux nombres. real log(real) number pow(number, number) Retourne la puissance n d'un nombre. int rand() Retourne un nombre aléatoire. void randomize() Démarre une séquence de nombres aléatoires. real round(real) Arrondi au plus proche, plancher ou plafond. real sin(real) number sqrt(number) Retourne la racine d'un nombre. real tan(real)
Функции времени:
int time() Temps en millisecondes depuis le 1 Janvier 1970. dict localtime() Temps et date courant lors de l'appel, dans un dictionaire, voir ci-dessous.
Ключ диктанта, возвращаемый локалтаймом:
tm_sec Secondes après la minute [0,61] tm_min Minutes après l'heure [0,59] tm_hour Heures après minuit [0,23] tm_mday Jour du mois [1,31] tm_mon Mois à partir de Janvier [0,11] tm_year Année depuis 1900 tm_wday Jour à partir de Dimanche [0,6] tm_yday Jour depuis le 1 Janvier [0,365] tm_isdst Indicateur d'heure d'hivers
Обработка исключений требует внешнего определения. Синтаксис:
extern class exception string what() /class /extern try ... quelques instructions ... catch(exception e) print e.what() /try
Слова могут быть зарезервированы для целевого языка, но не являются частью Script.
псевдоним always и array был асинхронным
bool boolean break byte
поле catch char clar const продолжается
dict do do
echo else enum ошибка исключение
false file finally float for forever from function
общий
if импорт in include int integer is
let long
мод
nan natural new nil не нулевой номер
итак,
print private protected public
react real return
скрипт script sol static step super switch
text this to true try
undefined until
var void
while
yield
ноль