Полное справочное руководство для версии Скриптола 14.0.
Язык полностью реализован в компиляторе Script в PHP или бинарном.
- Включение в веб-страницу возможно только с компилятором Script в PHP.
- Использование XML в качестве структуры данных возможно в двоичном компиляторе.
- Переводчик является инструментом обучения и на данный момент распознает только часть языка (подробнее см. страницу «Изменение»).
- XML рассматривается интерпретатором как динамическая структура.
- XML рассматривается компилятором C++ как класс с именем «dom» и описывается в документе «dom.html». В ближайшее время XML-формат интерпретатора распространят на обоих компиляторов.
Новый язык программирования Script можно использовать с интерпретатором и компиляторами.
Для каждого компилятора существует версия Windows и Unix.
Цель языка - быть простым, естественным и, следовательно, снизить риск ошибок. Скриптол означает: «Scristwriter Oriented Language» или «язык сценариста» на французском языке. Это универсальный язык, созданный для создания динамических веб-страниц, скриптов и приложений с графическим интерфейсом. Это может быть также языком сценариев для приложений, обрабатывающих или создающих документы XML. Скриптол может быть вложен в HTML-страницу и преобразуется в ту же страницу с PHP-кодом, готовым для Net и полностью переносимым. Язык был определен по семи правилам, и одна страница подробно объясняет, зачем использовать Script.
Обратите внимание, что символы [], включенные в синтаксис инструкций, не являются частью синтаксиса и указывают опционный элемент, за исключением индексов и интервалов, которые точно используют эти символы.
Команда:
если [параметры] исходящие файлы
Если обнаружены ошибки, они отображаются, и программа не выполняется.
Параметры интерпретатора :
aucune: interprète et exécute un fichier source . -v: verbeux, affiche des informations détaillés. -q: silencieux (quiet), aucun message. -f: force, ignore les erreurs et exécute le programme.
В Windows команда:
solp [опции] nomficher
Если источник уже скомпилирован, программа интерпретируется, иначе компилируется перед интерпретацией, если нет ошибки.
Пока у источника есть ошибки, новая команда «solp nomficher» скомпилирует ее. Если источником является HTML-страница, она не запускается после компиляции. В Linux команда для компиляции:
solp опции nomficher
затем следуют:
php-q nomfichier.php, чтобы выполнить его.
Параметры компилятора Script-php :
aucune: compile un script en PHP ou le lance si déja compilé. -w compile du code inclus dans une page HTML et crée un fichier PHP. -t teste seulement, n'exécute pas. -r force l'exécution. Compile si besoin seulement. -b recompile le fichier et fichiers inclus. Le programme n'est pas lancé. -t invoque la traduction du source s'il est en français. -v affiche plus d'informations lors de la compilation. -q pas de message de compilation. -4: compile selon la syntaxe PHP 4 (les classes propres à PHP 5 ne sont pas utilisables).
Эти буквы можно объединить в один вариант. Итак, -бе эквивалентно -b -e
Для компилирования в C++ программа должна иметь следующую структуру:
1) Объявления глобальных переменных.
2) Определение классов и функций.
3) Инструкции. Она может быть вложена в функцию руки () или нет.
Эти правила не применяются для компиляции в PHP или для интерпретатора.
Команда компиляции:
solc [параметры] файл
Основной файл содержит функцию руки (). Зависимости вычисляются компилятором, который знает, что нужно компилировать или нет.
Параметры компайлера Script-C + +:
-b compiler tous les fichiers objets. -c compiler tous les sources en C++ seulement. -e lier les objets en un exécutable. -r lancer l'exécutable. -t invoquer la traduction. -v informations de compilation détaillées. -q pas de messages.
Источник Script - это просто текстовый файл, содержащий команды, по одной на строку.
Примеры :
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» (для компилятора он сам является функцией «main»).
Применение
Файл приложения содержит только объявления функций, переменных и классов. Главный источник - это тот, который проходит в командной строке компилятора, он должен содержать функцию «main» и команду вызова этой функции, как показано ниже :
int main() ... instructions ... return 0 main() // lancement du programme.
Скриптол можно определить как:
- ориентированный на объект.
- ориентированный на XML (XML-документ может быть структурой данных языка).
- универсальный: может использоваться для создания динамических сценариев, приложений или веб-страниц.
- естественные: типы происходят из культуры, а не из материала (номер, текст, настоящий,...).
- стиль XML для синтаксиса.
- иметь новые и более мощные структуры.
- обработка списка с таблицами и словарями.
- совместим с C, PHP, Java (может использовать их книжные магазины).
Это понятный язык благодаря:
- простой синтаксис.
- инструкции, законченные концом строки.
- единый оператор для интервалов, подлистов.
- схожий синтаксис для всех структур.
Чувствительность к регистру:
- Нельзя использовать одно и то же слово заглавными буквами.
- ключевые слова в нижнем регистре.
- идентификаторы чувствительны к регистру, но невозможно переопределить идентификатор с другим регистром.
Идентификаторы:
- размер до 255 символов или меньше в зависимости от целевого языка.
- начинается с заглавной или строчной буквы.
- за ними следуют буквы, символы подчеркивания или цифры.
Числа:
- целые числа подписываются на 32 битах (например, «int» в C).
- естественные не подписаны на 64 битах.
- вещественные, числа («номер») в плавающей запятой на 64 бите («двойной» в C).
Преобразование (cast):
- использование методов.
Гараж-коллектор (выделение памяти):
- нет необходимости выделять или освобождать память.
Объект-ориентированный:
- примитивы являются объектами и имеют методы.
- литералы являются объектами и имеют методы.
- простое наследие.
- перегруженность методами (версия C++ пока только).
- конструкторы. Никаких разрушителей.
Ориентированный на XML:
- XML-документы могут быть включены в источник Script, XML - структура данных языка.
- экземпляры XML-документов.
Чтобы код Script можно было вставить в HTML, он должен быть включен в следующие теги :
<?sol ...code... ?> ou <?script langage=scriptol> ...code... </script>« Скриптол» или «скриптол» также распознаны. Ключевое слово «скрипт» не требуется для некоторых редакторов HTML. Последняя строка сценария Script должна быть закончена точкой с запятой или разрывом строки перед символом?>
Тестирование HTML-страниц Если ты установил на компьютер такой сервер, как Apache или Xitami или Windows Server, и настроил его на распознавание расширения php, твой код будет обработан как в Интернете, после компилирования в PHP. В противном случае он перенаправит вас в тестовый файл. HTML динамической страницы, а затем выполнить PHP код:
solp -w mapage
php mapage.php > test.HTML
Инструкция заканчивается точкой запятой или концом строки. Когда оператор превышает ширину строки, он объединяется со следующей строкой, если она заканчивается запятой, оператором или любым другим символом, который не может завершить инструкцию. Для продолжения операции в следующей строке символ не требуется. Несколько инструкций в одной строке разделяются точкой с запятой. Это может быть полезно, если ты помещаешь код Script на HTML-страницу и редактор соединяет строки !
Комментарии одной строки: "Комментарий идет от символа до конца строки .//Также распознается символ C++. Комментарии не сохраняются на целевом языке. "дубликат символа делает комментарий постоянным в целевом коде. Комментарий в нескольких строках начинается с/* и заканчивается на */
Язык Script никогда не использует один и тот же символ для концептуально разных целей.
+ addition - sousctraction * multiplication / division ^ puissance = opérateur d'assignement. < moins que. > supérieur à. <= inférieur ou égal. >= supérieur ou égal. := assignement conditionnel. ; 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 arguments 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 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 %). ~~ un code à insérer directement dans le code généré.
Идентификаторы - это имена переменных, функций и объектов. Они начинаются с буквы, за которой следуют буквы, цифры или символы подчеркивания. Их нельзя отличить по регистру: нельзя дать одно и то же имя двум разным объектам, один заглавными буквами, другой - строчными. Ключевые слова - это зарезервированные слова языка, они в нижнем регистре .
Примитивы являются базовыми объектами. Когда они являются аргументами функции, функция использует копию их содержимого, их значения и не изменяет оригиналом, в то время как она использует псевдоним для других объектов.
Примитивы Скриптола таковы :
number toute sorte de nombre (jusqu'au double du C++). int un nombre arrondi à la partie entière. 32 bits. -1 vaut nil. integer identique. natural entier non signed de 64 bits. 0 vaut nil. real un nombre avec des décimales. -1 vaut nil. boolean la valeur vrai ou faux. text une chaîne de caractères. "" vaut nil. array une liste dynamique indexée d'objets. dict une liste associative formée de couples clé:valeur.Существуют и другие специальные виды :
dyn élément générique de array ou valeur de dict. file un fichier. dir un répertoire. byte type externe de C. cstring utilisé dans les déclarations externes en langage C (traduit par char *). * désigne un pointeur de C associé à un type.
Примитивы имеют конструкторы, как и другие объекты с разными аргументами, что позволяет использовать их для преобразований типа.
Синтаксис:
int(int | number | text)
Примеры :
int("123") ...représente le nombre 123 text(10) ...représente la chaîne "10".
Примитивы являются переменными, если они явно не объявлены постоянными, с ключевым словом «константа».
Буквальные числа пишут :
123 entier (int) 123n naturel (natural) 123.0 réel (real) 0.123 réel (real) 1.2e10 réel (real) 0xf8 hexadécimal 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" автомобиль "
Мульт-линии
Ты также можешь иметь текст, распределенный по нескольким строкам в символах «~~».
Пример :
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"
Кроме того, символы {} имеют особое значение для интерпретатора PHP, но это не является частью языка Script.
Тексты в простых кавычках, которым предшествует $, вообще не интерпретируются.
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
«Постоянный» модификатор указывает на примитив, значение которого не может измениться. При объявлении необходимо назначить значение.
Синтаксис и примеры объявления констант :
constant type nom = valeur constant int X = 1 constant boolean B = true constant 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). null assigné à un objet quand il n'est pas encore initialisé.
Ключевое слово nil ссылается на содержимое объекта, а null заменяет адрес.
null означает «не имеет значения», или «объявлен, но не определен», в то время как nil означает «не найден» или «пуст». Ключевое слово null преобразуется в «null» в PHP и «NULL» в C++ ;
Если идентификатору присваивается значение null, его нельзя использовать или использовать, пока ему не будет присвоено значение. Его можно сравнить только в нулевом ключевом слове.
Нил - не настоящая ценность, а скорее конструкция языка. Вот значения нила в разных контекстах...
При создании кода C++ nil заменяется следующими значениями :
boolean false int -1 natural 0 real -1 text "" array {} dict {} file NULL dir NULL objet NULL dyn selon le contenu.При назначении nil на интервал в массиве nil удаляет этот интервал из массива.
При формировании PHP-кода nil заменяется на следующие значения :
retour d'une fonction: false dans une expression: false assignement: comme C++
Синтаксис простого назначения :
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 в одном порядке. Если число не совпадает, это ошибка.
Если функция возвращает только одно значение, то одно и то же значение присваивается всем переменным слева.
Целью этого специального назначения является назначение свойства или другой переменной, которая уже имеет значение по умолчанию, когда указано новое значение. Символ: = условно присваивает переменную, если значение, которое нужно назначить, не стоит nil.
Флаг ошибки устанавливается на «истина», если выделяемое выражение имеет значение nil.
Пример :
x := z error ? print "z est nil"Приведенная выше инструкция эквивалентна :
if z <> nil x = z else print "z est nil" /if
Операторы сравнения :
= (é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 ( argument [, argument]* ) [:] ... 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
В этом примере переменные «размер», «имя», «значение» являются глобальными, и она назначается содержимым диктанта в аргументах.
Чтобы этот пример был совершенным на самом деле, надо использовать условные повестки, через тест. Или с помощью символа условного назначения: =
x: = y
x назначается значением y только в том случае, если y не является nil.
Область - это уровень пространства видимости объявленных объектов. Функция открывает новую область для всех объявленных внутри переменных. Если функция находится в глобальной области, в функции отображаются все глобальные переменные, скомпилированные перед функцией.
Невозможно повторно записать в функцию переменную с тем же именем, что и глобальную переменную.
Если функция является методом класса, в функции отображаются все переменные, объявленные в классе перед функцией.
Объекты, объявленные в функции, видны в управляющих структурах внутри функции.
Интерпретатор PHP может не показывать сообщения об ошибках или предупреждениях, предшествуя вызову функции символа @.
Символ игнорируется бинарным компилятором.
@mafonction(x, y)
Полезно иметь возможность переключать параметры на программу из командной строки.
Скрипт Script (например, PHP) использует переменную PHP $ argv". Чтобы имитировать то, как C++ переходит от параметров к программе, создать функцию «рука» и вызвать её с $ argv в аргументе (и $ argc при необходимости):
int main(int argnum, array arglist) print argnum, "arguments" scan arglist print arglist[] /scan return 0 main($argv, $argc) // argv and argc sont des variables PHP externes.
Функция main либо не имеет аргументов, либо имеет два :
int main() int main(int, array)
Эхо
Отображает выражение или список выражений, разделенных запятыми, без пробелов между ними и без возврата к конечной строке (как при печати).
Синтаксис: Эхо выражения [, выражение]
Пример :
x = 5 y = 20 z = 1 echo "values", x, y / 2 echo zНа экране это будет выглядеть так:
Пример :
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. scan by fonction. scan une instruction. scan /scan. 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.
Скриптол имеет другой синтаксис для управляющих структур инструкции или многострочных.
Управляющая структура одной инструкции имеет форму:
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é.Нет другого маркера конца, кроме конца строки. Инструкция является базовой и не может быть другой конструкцией.
Многострочная управляющая структура имеет форму :
nom-structure expression [:] ... instructions ... /nom-structureДвухточечный параметр не является обязательным (если только инструкция не находится в одной строке).
Пример с разделителями:
if a = b : print t ; /if
Условная управляющая структура от строки до фигуры :
if expression-booléene let instruction [else instruction] ou: if condition let instruction ; else instructionЭто гласит: если истинное состояние? тогда действие; в противном случае действия
Скриптол использует либо ключевое слово «let» или «?», когда действие является уникальной инструкцией или «:», либо возврат к строке, когда это блок инструкций.
Примеры :
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 ... /ifN.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
Позволяет отсканировать таблицы и применить функцию к каждому элементу.
Синтаксис:
scan a by f ou scan a [, b, c ... ] ... statements ... /scan- а и т.д. являются массивами (array, dict).
Формат scan by применяется к единому массиву для совместимости с PHP 5, можно использовать несколько массивов с форматом в тегах, возможно, поместить вызов функции в блок. Scan применяет функцию f к каждому элементу массива, заданному в качестве параметра.
Когда последний элемент таблицы достигнут, обработка заканчивается.
Чтобы элемент мог быть изменен функцией, модификатор «псевдоним» должен предшествовать типу аргумента в объявлении используемой функции. Для сканирования требуется пользовательская функция, а не метод класса.
В маркированном виде каждый элемент массива обрабатывается инструкциями внутри корпуса конструкции. Доступ к текущему элементу осуществляется по пустой индексации [].
Синтаксис инструкции также разрешен :
scan a let instruction
Примеры :
array a = {1,2,3,4} void fun(number x) : print x * x; return scan a by fn scan a : print a[] * a[]; /scan
Оба примера имеют один и тот же результат.
Таблицу можно изменить на [] =...
Примеры :
scan a let a[] = 0 scan a a[] * a[] print a[] /scan
Пример с несколькими таблицами :
void mulfon(dyn a, dyn b) print a * b; return scan a, b by mulfon ou scan a, b let print a[] * b[]
Вот пример создания и просмотра двухмерной таблицы :
array a = ( ("a", "b", "c"),("x", "y", "z"), (1, 2, 3))Эта таблица содержит три dyn (динамические переменные), каждая из которых содержит одну таблицу.
scan a array x= a[] scan x print x[] /scan /scan
Управляющая структура 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 и выполняется непрерывная команда.
Enum позволяет последовательно присваивать значения идентификаторам, а в Script он позволяет присваивать не целые значения - реальные или текстовые.
По умолчанию целое число присваивается с нуля и увеличивается для каждого идентификатора в списке.
Двойная точка используется для назначения определенного значения идентификатору, а знак равенства используется для перезапуска данного значения.
Синтаксис:
enum identifieur [ : value | = value ] [ identifieur ...]* /enum
enum: Z, UN, DEUX, TROIS /enumЭто присваивает 0 Z, 1 UNE и так далее. Это эквивалентно :
constant int Z = 0 constant 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"Содержание а будет: «приставка».
Return Method Fonction Méthodes de text ---------------------------------------------------------------------------- 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 len() retourne la longueur. 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. ----------------------------------------------------------------------------
Заявлены с типом: dyn.
Динамические переменные имеют методы всех других типов переменных, но не методы объявленных классов (см. exter). Когда переменная назначается dyn, для назначения содержимого dyn типичной переменной требуется cast.
Методы дин
- методы преобразования: toBoolean, toInt, toNatural, toText, toNumber, toArray, toDict, toFile, toObject. - методы тестирования типа: isBoolean, isInt, isInteger, isReal, isNumber, isNatural, isText, isArray, isDict, isFile, isObject.
- метод arrayType (возвращает тип типизированного массива).
Последовательность - это статический (текст) или динамический (массив или дикт) список.
Списки и последовательности имеют одни и те же операторы, кроме # и |. Операции в списках:
[] : 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 = { 8, 9 } assigne un tableau litéral. 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" scan a print a[] ... 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 } dyn x = a[1] utilisation de dyn pour lire l'élément de type inconnu. text t = a[2] int i = a[3]
При добавлении элемента за пределы предельного значения он помещается в таблицу на последнем месте.
При назначении элемента со следующей инструкцией содержимое изменится в зависимости от целевого языка :
a[1000] = "x" En PHP: 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-dela 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] = dyn 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).
Количество измерений не ограничено. Для двухмерной таблицы синтаксис для...
- доступ к элементу: 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 («тысяча»), результат будет таким же .
Диктант - это дымамический список ключевых и ценных пар. Ключи - это всегда тексты. Значения могут быть любым объектом.
Ключ и значение могут быть переменными. Формат ключевой пары и значения: ключ: значение.
(Эквивалент PHP: ключ => значение). Пустой диктант представлен как {}. Литеральный диктант - это список пар, разделённых запятой, и загибающихся между {} t.
Наоборот, диктант заполнен повестками :
d[k] = "b" d["un"] = "element 1"
У Array и dict одинаковые методы, но некоторые более полезны с тем или иным типом.
Диктант можно создать из литерала или конструктора.
Синтаксис:
dict d crée un dict. dict d = {x:v, y:w,...} crée et initialise un dict. dict d = dict(x:v, y:w,...) c crée et initialise un dict.
Значения могут быть любого типа объекта.
Ключ может быть переменной, а значение - выражением.
Пример :
text k = "a" text v = "b" dict d = dict(k : v) dict d = dict(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"} création du dict d.display() affichage for k,v in d : print k, v; /for affichage avec une boucle for number i = 0 d.begin() while i < d.size() affichage avec un itérateur print i,"i", d.clé(), d[] d.inc() /while let i + 1
Пример: прочесть последнюю пару :
v,k = d.end(), d.key()Порядок важен, так как d.end () перемещает указатель в конец .
Return Name Actiondyn begin() pointe sur le premier élément. dyn dec() retourne un élément et décrémente le pointeur. void display() affiche le tableau. dyn end() pointe sur le dernier élément. boolean empty() return true si le tableau est vide. int find(dyn) recherche un élément, retourne l'index ou nil. void flip() les valeurs deviennent clés et inversement. dyn inc() retourne un élément et incrémente le pointeur. int index() retourne l'index de l'élément pointé. void insert(int, dyn) 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é. void kSort() réordonne les index en préservant les associations. boolean load(text nom) charge un fichier dans un tableau ("file" de PHP). dyn min() retourne la valeur la plus faible. dyn max() retourne la plus forte valeur. void pack() rend les éléments du tableau consécutifs. dyn pop() lit et supprime le dernier élément. dyn pop(int) lit et supprime l'élément à la position donnée. void push(val) ajoute un élément à la fin. dyn rand() retourne un élément à une position aléatoire. array reverse() retourne la liste en ordre inversé. dyn shift() lit et supprime le premier élément. int size() retourne le nombre d'éléments. void sort() trie les valeurs en ordre ascendant. void store(text nom) sauve le tableau dans un fichier. number sum() calcule la somme des éléments. array unique() retourne le tableau sans valeur en double, la première est gardée. void unshift(dyn) insère un élément en première position. dyn value() retourne la valeur pointée. k,v = d.key(), d.value() lit le couple clé:valeur
Типизированная таблица содержит уникальный тип объектов. Это гораздо эффективнее, чем общая таблица, потому что она индексируется, а не ассоциативно, и содержит непосредственно 32 или 64-битные объекты или указатели, а не динамические объекты (dyn).
Массив целых чисел в 100 раз быстрее стандартного массива для бинарных исполняемых файлов, но разницы в PHP нет.
Типизированные таблицы также динамичны, размер не предопределен и не ограничен.
Заговорщик типичной картины имеет форму :
type(...éléments...) Exemple: int(1, 2, 3)Количество элементов от 0 до n.
При наличии одного элемента нет разницы между типичным конструктором массива и скалярным конструктором :
int(1) text("text")Это не проблема при назначении, так как из скалярного можно создать одноэлементный массив, но в выражении есть двусмысленность.
type{...éléments...}Объятия имеют значение «картина».
Синтаксис для объявления массива целых чисел :
int[] i = int(x, y, ....)После объявления он используется как смешанный массив, но в него можно добавить только целые числа.
Примеры :
int[] x = int(5) int[] x = int(1,2) int[] x = y + int{5}
Заявление гласит :
text[] t = text(a, b, "demo", ...)Правила те же, что и для целых.
Заявления :
real[] r = real(1.0, 2.0, etc...) natural[] n = natural(1, 2, etc...) number[] n = number(1, 2.0, ...)
Заявление гласит :
class uneclasse ... /class uneclasse objet1 ... instance uneclasse objet2 ... instance objet[] = objet(objet1, objet2, ...) ... tableau d'objets
Для смешанной таблицы можно назначить типизированную таблицу:
Пример :
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) dyn d = dyn(i)
Для использования этого dyn предусмотрены два метода:
arrayType () возвращает тип массива, содержащийся в dyn.
toList (int = 0) возвращает типичный массив содержимого.
Параметр является типом и требуется, когда dyn содержит смешанный массив, который требуется преобразовать в типизированный массив.
Признанные типы :
$TYPE_INT tableau d'entiers $TYPE_TEXT $TYPE_REAL $TYPE_NATURAL $TYPE_NUMBER $TYPE_OBJECT
Пример :
d = dyn(int(1,2)) if d.arrayType() = $TYPE_INT: int[] i = d.toList() = $TYPE_TEXT: text[] t = 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
- Невозможно напрямую сравнить элемент и строку. Например :
text[] t = text("un", "deux") if t[0] = "one" .. non valide text t2 = t[0] if t2 = "one" .. valide
- С помощью PHP 4.3 вставьте объект в таблицу, так что значения будут вставлены, а не саму таблицу! Я считаю, что это баги tdonc нельзя вставить объекты напрямую, но можно вставить таблицу объектов.
- Функция 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.
Методы файла :
return 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
Тип dir имеет конструктор и get () и используется для использования встроенных функций управления каталогами.
Конструктор используется для создания или отображения dir .
void dir(text) constructeur. L'argument est un chemin. array get() retourne le contenu du répertoire dans un tableau.
print dir("c:/jeux") ou dir x = dir("sousdir") print x ou array a = x.get() a.display()
Разделитель каталогов - «/» для всех систем.
Функции управления каталогами :
dir opendir(text) ouvre un répertoire, retourne un dir. text readdir(dir) lit l'entrée suivante et retourne le nom. void closedir(dir) ferme le répertoire. void rewinddir(dir) revient à la première entrée. boolean is_dir(text) retourne vrai si l'entrée est un répertoire. boolean is_file(text) retourne vrai si l'entrée est un fichier.
Функции chdir, mkdir, rmdir подробно описаны в главе о встроенных функциях.
Пример использования, отображающего содержимое каталога :
dir monrep = opendir("/chemin") while forever text t = readdir(monrep) if t = nil break if t[0] <> "." print t /while
После открытой инструкции конструктор 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 или C++ могут использоваться в коде Script, например, объекты Script.
Их видимость является внешней, поэтому они видны как глобальные объекты класса.
Переменные и константы PHP могут использоваться в качестве переменных и констант Script при объявлении с ключевым словом «exter».
Внешние объявления, как и включенные, размещаются в заголовке файла.
Синтаксис для внешней переменной :
extern type identifieur extern constant type identifieur
Никаких контрольных проверок типа или области внешнего объекта. В функции требуется «глобальное» заявление.
Пример :
global argv array a = $argv
Константа PHP объявляется как переменная с ключевым словом «constant»:
extern constant 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 или C++.
В одну программу можно вставить определенный код PHP или C++.
- Для вставки PHP-кода используйте:
require_once («lecode.php»)
Эта инструкция имеет эффект только для интерпретатора PHP, скомпилированного в C++, она игнорируется.
- Чтобы вставить код C++, используйте:
# include «лекодe.c + +»
Это будет составлено в C++, но для интерретора PHP это комментарий.
Класс - это структура, которая содержит переменные (атрибуты) и имеет функции (методы).
После определения класса он становится новым сложным типом языка, с помощью которого объявляются объекты, экземпляры класса. Атрибуты и методы объекта используются с командой фигуры :
x = objet.attribut objet.methode()
Описание класса начинается с ключевого слова «class» и заканчивается на «/class ».
Атрибуты (переменные) должны быть размещены перед элементами. Класс открывает пространство видимости. Глобальные переменные и определенные функции не видны внутри класса. Атрибуты и методы класса или экземпляра другого класса видны во всех методах класса с именем экземпляра в префиксе.
Exemple d'une déclaration de classe: class voiture ...membres... /class Exemple de classe avec attributes et méthodes: class voiture int lavitesse = 50 int passagers = 4 void voiture.vitesse(int i) int x = lavitesse * 2 return x /class Exemple d'instance avec référence aux méthodes: 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.
ПРИМЕЧАНИЕ: Статический XML реализуется в интерпретаторе только на данный момент.
Двоичный компилятор Script использует класс dom с аналогичными методами и требует файла libdom.sol, описывающего класс.
Компилятор Script в PHP в данный момент не распознает XML.
В будущем данная глава будет применяться и к компиляторам.
XML - это структура данных в Script. XML-документ определяется как легкий, а затем используется для хранения и доставки данных, просто как класс, с большей гибкостью.
XML-документ может использоваться статически, изменяются только содержимое элементов и значения атрибутов.
Доступ к элементу осуществляется по сгруппированному списку имен элементов, содержащих этот элемент.
dom.document.client.getData()
Методы также позволяют изменять структуру, добавлять или удалять элементы. Об этом говорится в разделе «Динамический XML».
XML-документ может быть включен в исходный скриптол в «легком» виде, без угловых скобок.
Синтаксис структуры XML :
xml [name] ... un nom optionel pour le document. [headers] ... des éléments d'en-tête optionels. [doctype] ... des "doctype". tag ... un ou plusieurs éléments balisés. /xml
Заголовок
Синтаксис:
<? identifieurs et attributs ?>
Доктор
Синтаксис:
<! identifieurs et attributs >Обратите внимание, что это заканчивается> и нет!>
Элемент
Маркированный элемент имеет форму :
nom [attribut [[,] attribut]* ] une liste d'attributs optionels [nom2]* aucun, un ou plusieurs sous-éléments. text ou un texte. ... / nom le nom de l'élément ici est optionel;
Если список атрибутов продолжается в следующей строке, запятая должна быть по крайней мере в конце строки.
XML-документ объявляет себя классом между маркерами XML и/XML в легком формате.
xml nomdocument nomelement [attributs] "données" ou ~~ données sur plusieurs lignes ~~ ou éléments imbriqués / nomelement /xml
Затем объявляются экземпляры XML.
nomdocument instance1 nomdocument instance2
Экземпляры создаются во время компиляции, изменения в документе во время выполнения не будут найдены в экземплярах.
Внешние документы загружаются в программу Script с методом «load», а имя файла или путь - в параметр.
xml x /xml x.load("demo") ou: x xinstance xinstance.load("demo")
Документ, загруженный и завершенный или определенный в источнике Script, сохраняется с использованием метода save и имени файла или пути в качестве параметра .
Можно назначить XML-экземпляр документа. Для этого необходимо объявить основной документ XML пустым, чтобы объявить экземпляр, прежде чем назначать его.
Пример с указанным выше названием.
xml dom /xml dom instance1 = nomdocument
Содержимое «instance1» теперь является содержимым документа «nomdocure».
Вы можете создать столько экземпляров «дома», сколько хотите.
Итератор - это набор методов, которые можно использовать с методами тегов.
Методы тегов связаны с именем документа или экземпляра документа, но относятся к указываемому в данный момент тегу.
Для просмотра содержимого документа или экземпляра используется итератор, состоящий из нескольких методов :
reset() aller au premier élément du document. begin() aller au premier élément du niveau courant. inc() pointer sur l'élément suivant. found() retourne vrai si un élément est trouvé par la méthode inc() ou down(). down() pointer sur l'élément contenu. up() revenir à l'élément contenant.
Документ можно просмотреть с помощью следующих методов :
end() aller au dernier élément du même niveau. dec() pointer sur l'élément précédent.
Пример использования итератора :
demo.reset() demo.down() while demo.found() print demo.getData() let demo.inc()
Итератор действует на уровне документа. Для достижения определенного уровня содержимого используется метод at () со строковым списком имен уровней содержимого .
xml demo document element "data'" / element "data" / / /xml demo.document.element.at()
Мы находимся на уровне «элемента», содержащегося в документе. Метод reset () возвращает текущий элемент в начало документа .
Доступ к содержимому элемента осуществляется двумя методами тегов - getData и setData :
text getData() retourne le contenu. void setData(text) change le contenu.
Эти методы связаны с именем документа или экземпляра и касаются текущего элемента.
nomdocument.getData() instance1.setData("quelque texte")
Можно получить доступ к такому атрибуту, как элемент словаря. Атрибут распознается по имени в параметре функции getAttribute () или setAttribute ().
xml doc elem1 att = "valeur" /elem1 /xml print doc.getAttribute("att1") doc.setAttribute("att1", "nouvelle valeur")
В качестве аргумента функции можно использовать экземпляр XML-документа и возвращать его через функцию.
Аргумент является новым экземпляром, а не указателем на исходный экземпляр, и возвращенный объект также является новым экземпляром.
В функции можно определить XML-документ. Если документ должен быть возвращен функцией, то для увеличения скорости выполнения будет возвращен указатель на документ.
xml dom /xml dom mafonction() xml demo nomelement "contenu" / /xml return demo dom x = mafonction() print mafonction()
В этой главе описаны функции для изменения структуры XML-документа или экземпляра.
void clear () Стирает содержимое документа.
Надстройка XML (XML)
Добавление потомка к текущему элементу документа. Новый элемент становится текущим элементом.
xml demo doc / /xml xml element inner "quelque texte" /inner /xml demo.addChild(element)
xml addNext (xml)
Добавляет элемент после текущего элемента документа.
Новый элемент становится текущим элементом документа.
Méthodes Définitions ------------------------------------------------------------------------------------ xml addChild(xml) Ajoute un descendant à l'élément courant. xml addNext(xml) Ajoute un successeur à l'élément courant. xml append(xml) Ajoute un autre document à la fin du document. Retourne le document augménté. xml at() Retourne l'élément pointé, sous forme de document XML. xml at(text) Pointer sur un élément dans le niveau, son nom en paramètre. xml at(text, text) Pointer sur un élément trouvé par l'attribut et sa valeur, en paramètres. xml begin() Pointer le début du niveau. Concrètement, sur le child du parent de la balise courante. void clear() Efface le contenu du document. xml clone(xml) Copie le contenu du document dans le document en paramètre. void display() Affiche le document. xml down() Aller sur le premier sous-élément de la balise courante. boolean empty() Retourne true si le document ne contient aucun élément. xml end() Aller sur la dernière balise du niveau. boolean found() Retourne true si dec ou inc ont atteint une balise, false sinon. text getData() Retourne le contenu de la balise courante. text getValue() Retourne la valeur de l'attribut en argument. boolean hasAttribute(text) Retourne true si l'attribut en argument existe dans la balise courant. xml inc() Pointe la balise suivante. int length() Retourne le nombre de balise dans le niveau. boolean load(text) Charge le fichier nommé en argument dans le document déclaré. xml reset() Va au premier élément du document. boolean save(text) Sauve le document dans un fichier nommé en argument. Retourne true si ok. void setData(text) Modifie le contenu d'une balise. void setValue(text, text) Modifie la valeur d'un attribute, ou le crée. xml up() Va au premier élément qui suit le conteneur de la balise courante. void xml([xml]) Constructeur, avec en option un autre document comme source. ------------------------------------------------------------------------------------
Синтаксис для включения внешнего файла Script :
include "nomfichier.sol"
Скобки необязательны. Необходимы одинарные или двойные кавычки. Если ты хочешь использовать PHP-файл напрямую, а компилятор его не обрабатывает, см. ниже.
Только файлы с расширением «.sol» будут обрабатываться компиляторами, если оно другое:
- solp (php) игнорирует инструкцию.
- solc (c++) передаст инструкцию компилятору C++.
Если, напротив, ты хотел включить файл в сформированный PHP-код, а не в код C++, ты можешь использовать функцию require_once («имя файла»), которая будет проигнорирована компилятором в C++ solc, так как динамическая вставка не может быть выполнена в C++.
Эта инструкция позволяет определить новые типы, которые парсер может распознавать, например примитивы или классы.
Можно использовать функцию в качестве аргумента другой функции, определив ее как тип. Это работает только на глобальном уровне, а не в классе. После определения типа его невозможно переопределить.
1) определить функцию:
Пример :
int compare(int a, int b) boolean b = (a < b) return b
2) определить тип, используя эту функцию в качестве модели :
define COMP = "compare"
3) определить другую родовую функцию, которая будет использовать эту функцию в качестве аргумента :
void mafonc(COMP a, int x, int y) print a(x,y) return
4) использовать родовую функцию:
Аргумент может быть исходной функцией или другой функцией с теми же аргументами и типами возврата.
mafonc("compare2", 10, 8)
Теперь можно определить другую функцию, например, «mul», по той же модели, поэтому с таким же типом возврата и аргументов, как функция «add», и использовать ее вместо этого.
mafonc («mul», x, y )
Синтаксис:
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. constant 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(dyn, dyn) 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é.
Функции каталогов :
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'hiver
Эту главу заменят главы «Статический XML» и «Динамический XML».
То, что здесь описано, функционально в компиляторе Script в C++, и останется совместимым с новым, более простым способом использования XML, который в настоящее время реализуется в интерпретаторе.
Заморский департамент Франции
Для использования XML-документа необходимо создать экземпляр dom. Дерево dom затем заполняется методом build ():
дом-мир
mondom.build ()
Для просмотра документа используйте метод отображения ().
Для его сохранения метод save () с именем файла в аргументе. В обоих случаях - аргумент dom. LIGHT позволяет облегчить презентацию. Можно назначить документ в одном доме другому дому с помощью метода assing.
Дорога
После создания дерева можно получить доступ к данным и атрибутам элементов с помощью методов dom.
Но у Script есть специальный синтаксис для наведения на элемент в документе. Вложенные элементы и элементы рассматриваются как объекты и подобъекты:
Синтаксис:
экземпляр [.nomelment] * «[» имя-атрибут: значение»]»? [.nom-метод (аргументы)]
- имя экземпляра dom,
- точка, за которой следует имя элемента,
- это для каждого подэлемента,
- пара атрибутов: значение в квадратных скобках, если мы хотим выбрать элемент из нескольких одинаковых имен,
- точка, за которой следуют метод и его аргументы.
Если ты просто хочешь указать на элемент, ты используешь метод at ().
Но к пути элемента можно добавить любой другой метод дома. См. пример demoxml.sol.
Чтение и запись
Можно прочитать и изменить значение атрибута, как и для данных.
- getValue (имя-атрибут) возвращает значение атрибута в аргумент.
- setValue (имя-атрибут, значение) присваивает значение атрибуту.
- getData () возвращает данные.
- setData (текст) меняет или присваивает заданный текст параметру.
Данные также могут быть назначены непосредственно :
mondom.unelement.souselement.setData("quelque texte") ou mondom.unelement.souselement = "quelque texte"
Итератор
Класс dom class может также использовать документ как стек XML.
Итератор формируется несколькими методами.
- begin() pointe sur le premier élément du document. - next() déplace sur l'élément suivant (dans le même élément conteneur). - up() déplace sur le successeur du conteneur. - down() pointe sur le sous-élément de l'élément courant. - found() retourne vrai si le successeur ou sous-élément existe, faux autrement.После того как элемент указан, к данным обращаются следующими методами.
Вставить и удалить элементы
Можно вставить элементы либо в качестве подэлемента, либо в качестве преемника указываемого элемента, либо удалить указываемый элемент.
Синтаксис:
nominstance.chemin.addNext(xnode) nominstance.chemin.addChild(xnode) nominstance.chemin.remove()
Чтобы вставить элемент, необходимо объявить его в документе XML. Можно переместить элемент, вставив его в новое положение и удалив исходный экземпляр.
HTML
HTML-страница имеет следующий формат :
xml html ...content... /html /xml
Скриптол реализует объявление объектов Java, благодаря редактору «java», и до тех пор, пока не будет включено расширение Java (см. врез: install).
Так же, как и файлы, для использования которых требуется использовать содержимое, для его использования необходимо импортировать файлы класса Java.
После импорта класса можно объявить экземпляры и вызвать методы класса Script.
Исходный файл java должен быть скомпилирован компилятором Java в .class перед импортом.
Синтаксис :
import java cheminclasse-nomclasse ou import ... déclarations de classes ... /import
Если слово «java» находится в начале пути класса, компилятор идентифицирует его, а модификатор может быть опущен:
Примеры :
import java java.awt.Dialog déclaration valide import java.awt.Dialog est aussi valide import java MaClasse déclaration valide import MaClasse n'est pas valide pour une classe Java.
Объявление экземпляра класса Java подобно объявлению экземпляра класса Script.
Пример :
java.awt.Dialog maDialogue ... ou simplement Dialog monDialogue MaClass monInstance
Если «Dialog» не объявлен классом Script, путь можно пропустить.
После объявления экземпляра он используется как любой другой объект.
monDialogue.setVisible(true) monInstance.disp() print monInstance.x
Если ты пишешь собственный Java-класс, он должен находиться в отдельном файле с именем класса, с расширением .java. Его должен составить javaAC.
Обработка исключений поддерживается только целевыми языками C++ и PHP 5.
Синтаксис:
extern class exception string what() /class /extern try ... quelques instructions ... catch(exception e) print e.what() /try
Препроцессор позволяет писать скриптольные программы с ключевыми словами на любом языке.
Для его использования необходимо:
1) список ключевых слов.
2) параметр -t в командной строке (не работает с вариантом -w).
3) запись в файле solc.ini или solp.ini (или .cfg) фигуры:
Keywords = расширение
Расширение - двухбуквенный код в зависимости от используемого языка, пример:
Keywords = fr... для французского языка.
Первоначальный список ключевых слов находится в файле «keywords.en». Если в языке, который ты хочешь использовать, нет списка, его нужно создавать с каждым иностранным словом, за которым следует английский эквивалент (взять keywords.fr в качестве примера).
Если файл «.ini» или «.cfg», характерный для источника, не имеет записи Keyword, параметр -t будет пропущен для этого файла.
- символы <- и ->.
- ключевое слово string заменяется на cstring.
- внешние объявления char * заменяются cstring.
- оператор спички и его определение устарели.
- методы на числах бесполезны и подавлены.
- используется () для пустого массива. Использовать {} или массив ().
- префикс для строки PHP устарел и бесполезен.