Язык программирования Script

Полное справочное руководство для версии Скриптола 14.0.

Язык полностью реализован в компиляторе Script в PHP или бинарном.
- Включение в веб-страницу возможно только с компилятором Script в PHP.
- Использование XML в качестве структуры данных возможно в двоичном компиляторе.
- Переводчик является инструментом обучения и на данный момент распознает только часть языка (подробнее см. страницу «Изменение»).
- XML рассматривается интерпретатором как динамическая структура.
- XML рассматривается компилятором C++ как класс с именем «dom» и описывается в документе «dom.html». В ближайшее время XML-формат интерпретатора распространят на обоих компиляторов.

Домашняя страница: https://www.iqlevsha.ru/


Узел: Top, Next: , Previous: (dir), Up: (dir )

Таблица результатов


Узел: Общие сведения, Next: Об , Previous: Top, Up: Top

Общие положения

Новый язык программирования Script можно использовать с интерпретатором и компиляторами.
Для каждого компилятора существует версия Windows и Unix.
Цель языка - быть простым, естественным и, следовательно, снизить риск ошибок. Скриптол означает: «Scristwriter Oriented Language» или «язык сценариста» на французском языке. Это универсальный язык, созданный для создания динамических веб-страниц, скриптов и приложений с графическим интерфейсом. Это может быть также языком сценариев для приложений, обрабатывающих или создающих документы XML. Скриптол может быть вложен в HTML-страницу и преобразуется в ту же страницу с PHP-кодом, готовым для Net и полностью переносимым. Язык был определен по семи правилам, и одна страница подробно объясняет, зачем использовать Script.


Узел: Об этом руководстве, Next: , Previous: Общие, Вверх: Top

Об этом руководстве

Обратите внимание, что символы [], включенные в синтаксис инструкций, не являются частью синтаксиса и указывают опционный элемент, за исключением индексов и интервалов, которые точно используют эти символы.


Узел: Интерпретация скриптольной программы, Next: PHP, Previous: Об этом руководстве, Up: Top

Интерпретация скриптольной программы

Команда:
если [параметры] исходящие файлы

Если обнаружены ошибки, они отображаются, и программа не выполняется.

Параметры интерпретатора :

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.


Узел: Компилировать программу Script на PHP, Next: , Previous: Интерпретировать программу скриптола, Up: Top

Компиляция программы Script на PHP

В 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


Узел: Компилировать бинарную программу Script, Next: , Previous: Компилировать программу Script на PHP, Up: Top

Компиляция двоичной программы Script

Для компилирования в 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.


Узел: Моя первая программа, Next: , Previous: Компиляция бинарной программы Script, Up: Top

Моя первая программа

Источник 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.

Есть возможность работать как с редактором, так и с консольным окном.


Узел: Сценарий проекта, , Предыдущий: Моя первая программа, Вверх: Top

Проект Script

Файл проекта не требуется.
В Java или PHP программа является источником, который включает другие источники. Скриптол сохраняет эту структуру.
Источник скриптола должен иметь инструкцию include для каждого файла, содержимое которого используется. Компилятор вычисляет зависимости на нескольких уровнях включений и среди взаимных включений.


Узел: Исходный файл Script, Next: , Previous: Проект Script, Up: Top

Исходный файл Script

Файл Script должен иметь расширение «sol», и будет преобразован в php-файл расширения, или cpp и hpp, или исполняемый файл.
Это форма источника, у нас будет сценарий или приложение.

Режиссерский сценарий
Источник сценария - это последовательность инструкций и определений функций или классов. Он может включать другие файлы, содержащие объявления функций, переменных, классов.
Скрипт не может содержать функции «main» (для компилятора он сам является функцией «main»).

Применение
Файл приложения содержит только объявления функций, переменных и классов. Главный источник - это тот, который проходит в командной строке компилятора, он должен содержать функцию «main» и команду вызова этой функции, как показано ниже :

  int main()
     ... instructions ...
  return 0

  main()     // lancement du programme.


Узел: Характеристики языка, Next: Page, Previous: Исходный файл Script, Up: Top

Особенности языка

Скриптол можно определить как:
- ориентированный на объект.
- ориентированный на XML (XML-документ может быть структурой данных языка).
- универсальный: может использоваться для создания динамических сценариев, приложений или веб-страниц.
- естественные: типы происходят из культуры, а не из материала (номер, текст, настоящий,...).
- стиль XML для синтаксиса.
- иметь новые и более мощные структуры.
- обработка списка с таблицами и словарями.
- совместим с C, PHP, Java (может использовать их книжные магазины).
Это понятный язык благодаря:
- простой синтаксис.
- инструкции, законченные концом строки.
- единый оператор для интервалов, подлистов.
- схожий синтаксис для всех структур.

Чувствительность к регистру:
- Нельзя использовать одно и то же слово заглавными буквами.
- ключевые слова в нижнем регистре.
- идентификаторы чувствительны к регистру, но невозможно переопределить идентификатор с другим регистром.

Идентификаторы:
- размер до 255 символов или меньше в зависимости от целевого языка.
- начинается с заглавной или строчной буквы.
- за ними следуют буквы, символы подчеркивания или цифры.

Числа:
- целые числа подписываются на 32 битах (например, «int» в C).
- естественные не подписаны на 64 битах.
- вещественные, числа («номер») в плавающей запятой на 64 бите («двойной» в C).

Преобразование (cast):
- использование методов.

Гараж-коллектор (выделение памяти):
- нет необходимости выделять или освобождать память.

Объект-ориентированный:
- примитивы являются объектами и имеют методы.
- литералы являются объектами и имеют методы.
- простое наследие.
- перегруженность методами (версия C++ пока только).
- конструкторы. Никаких разрушителей.

Ориентированный на XML:
- XML-документы могут быть включены в источник Script, XML - структура данных языка.
- экземпляры XML-документов.


Узел: HTML-страница, Next: Previous: Характеристики языка, Up: Top

HTML-страница

Чтобы код 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


Узел: Инструкция, Next: : HTML-страница, Up: Top

Подготовка

Инструкция заканчивается точкой запятой или концом строки. Когда оператор превышает ширину строки, он объединяется со следующей строкой, если она заканчивается запятой, оператором или любым другим символом, который не может завершить инструкцию. Для продолжения операции в следующей строке символ не требуется. Несколько инструкций в одной строке разделяются точкой с запятой. Это может быть полезно, если ты помещаешь код Script на HTML-страницу и редактор соединяет строки !


Узел: Комментарий, Предыдущий: Инструкция, Вверх: Верх

Комментарий

Комментарии одной строки: "Комментарий идет от символа до конца строки .//Также распознается символ C++. Комментарии не сохраняются на целевом языке. "дубликат символа делает комментарий постоянным в целевом коде. Комментарий в нескольких строках начинается с/* и заканчивается на */


Узел: Символы, Next: : Comment, Up: Top

Символы

Язык 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é.


Узел: Идентификаторы и ключевые слова, Next: , Previous: Символы, Up: Top

Идентификаторы и ключевые слова

Идентификаторы - это имена переменных, функций и объектов. Они начинаются с буквы, за которой следуют буквы, цифры или символы подчеркивания. Их нельзя отличить по регистру: нельзя дать одно и то же имя двум разным объектам, один заглавными буквами, другой - строчными. Ключевые слова - это зарезервированные слова языка, они в нижнем регистре .


Узел: Переменные или примитивы, , Previous: Идентификаторы и ключевые слова, Up: Top

Переменные или примитивные

Примитивы являются базовыми объектами. Когда они являются аргументами функции, функция использует копию их содержимого, их значения и не изменяет оригиналом, в то время как она использует псевдоним для других объектов.

Примитивы Скриптола таковы :

 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".

Примитивы являются переменными, если они явно не объявлены постоянными, с ключевым словом «константа».


Узел: Литералы, Next: , Previous: Переменные или примитивы, Up: Top

Литералы

Буквальные числа пишут :

  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)


Узел: Кавычки и выталкивания, Next: , Previous: Literal, Up: Top

Кавычки и вытяжки

Пишется литературный текст: «унтекст» или «унтекст ».

Пример :

  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


Узел: Объявление, Next: , Previous: Переменная в строке, Up: Top

Декларация

Объявление переменной имеет форму :

  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


Узел: Константа, Next: , Предыдущий: Декларация, Вверх: Top

Константа

«Постоянный» модификатор указывает на примитив, значение которого не может измениться. При объявлении необходимо назначить значение.

Синтаксис и примеры объявления констант :

  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, Next: , Previous: Constant, Up: Top

Нил и ноль

Ключевое слово 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++


Узел: Назначение, Next: назначение, Ранее: Nil и null, Вверх: Top

Назначение


Узел: Простое назначение, назначения, Предыдущий: Назначение, Вверх: Верх

Простое назначение

Синтаксис простого назначения :

   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 в одном порядке. Если число не совпадает, это ошибка.
Если функция возвращает только одно значение, то одно и то же значение присваивается всем переменным слева.


Узел: Условное назначение, Previous: Множественные назначения, Up: Top

Условное назначение

Целью этого специального назначения является назначение свойства или другой переменной, которая уже имеет значение по умолчанию, когда указано новое значение. Символ: = условно присваивает переменную, если значение, которое нужно назначить, не стоит nil.
Флаг ошибки устанавливается на «истина», если выделяемое выражение имеет значение nil.
Пример :

   x := z
   error ? print "z est nil"
Приведенная выше инструкция эквивалентна :
   if z <> nil
      x = z
   else
      print "z est nil"
   /if


Узел: Операторы, Next: , Previous: Условное назначение, Up: Top

Операторы

Операторы сравнения :

   =    (é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).

Прецедент

Унарные операторы имеют прецедент над бинарными операторами. Между операторами одинаковой арности предшествующие значения задаются скобками.


Узел: Выражение, Next: , Previous: Операторы, Up: Top

Выражение

Выражение - это сочетание значений и операторов.

Арифметические выражения

Это арифметические значения или вызовы функций, объединенные с этими операторами:

  +
  -
  *
  /
  ^        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.

Пересечение двух списков возвращает элементы, общие для обоих. Объединение двух списков возвращает все их элементы. Элементы, принадлежащие обоим, сохраняются только один раз. Если один из списков уже имеет дубликат, сохраняется только первый экземпляр.


Узел: Прецедент, Next: , Previous: Expression, Up: Top

Прецедент

Некоторые языки программирования устанавливают правила прецедента, поэтому, когда скобки опущены, известно, какой термин касается каждого оператора. Хотя прецедент был построен в парсере Script, ошибки сообщений будут отправляться, если скобки опущены, так как они необходимы для читаемости.
Единственный случай, когда предыстория допускается без скобок, это для унарных операторов: not, ~ Унарный оператор всегда применяется к следующему термину, поэтому для применения его к выражению нужно поместить в скобки. Пример :

  if not a and b
  if not (a and b)
Оператор не связан с объектом «a» в первом, во втором - с отрицанием выражения.

В составных назначениях (см. ниже) первый оператор относится к переменной, которая должна быть назначена с выражением справа от нее.


Узел: Функция, Next: , Previous: Previous, Up: Top

Функция

Функция определяется с помощью интерфейса, указывающего, как ее вызвать, набора инструкторов, и заканчивается ключевым словом «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.


Узел: Значения по умолчанию, Next: Previous: Alias, Up: Top

Значения по умолчанию

Задав значение по умолчанию, можно задать параметр для вызова функции. Полный синтаксис интерфейса :

 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.


Узел: Область и функция, режим, Предыдущий: Значения по умолчанию, Вверх: Верхний

Область и функция

Область - это уровень пространства видимости объявленных объектов. Функция открывает новую область для всех объявленных внутри переменных. Если функция находится в глобальной области, в функции отображаются все глобальные переменные, скомпилированные перед функцией.
Невозможно повторно записать в функцию переменную с тем же именем, что и глобальную переменную.
Если функция является методом класса, в функции отображаются все переменные, объявленные в классе перед функцией.
Объекты, объявленные в функции, видны в управляющих структурах внутри функции.


Узел: Тихий режим, Next: Main, Previous: Scope & Function, Up: Top

Безмолвный режим

Интерпретатор PHP может не показывать сообщения об ошибках или предупреждениях, предшествуя вызову функции символа @.
Символ игнорируется бинарным компилятором.

  @mafonction(x, y)


Узел: Main, Next: : Тихий режим, Up: Top

Функция «рука»

Полезно иметь возможность переключать параметры на программу из командной строки.
Скрипт 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)


Узел: Print и echo, Next: : Main, Up: Top

Печать и эхо

Эхо

Отображает выражение или список выражений, разделенных запятыми, без пробелов между ними и без возврата к конечной строке (как при печати).

Синтаксис: Эхо выражения [, выражение]

Пример :

  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 без выражения отправляет возврат к строке.
Пример :

  print


Узел: Ввод, Предыдущий: Печать и эхо, Вверх: Верх

Вклад

Для ввода текста с клавиатуры используйте команду input.
Текст может отображаться перед вводом текста.

Пример :

  text name
  input name
  print name
Пример :
  input "who are you? ", name

Перед командой input должна быть объявлена переменная, которая должна быть текстом или числом любого типа.


Узел: Контрольные структуры, Next: If, Previous: Input, Up: Top

Контрольные структуры

Контрольные структуры :

 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é.
Нет другого маркера конца, кроме конца строки. Инструкция является базовой и не может быть другой конструкцией.
Инструкция «let» всегда является последней частью контролирующей структуры и может быть единственной. Символ «?» - это просто аббревиатура «let». Let требуется, если инструкция является назначением или вызовом функции, но опционально, если за ней следует ключевое слово. Если «else» или «let» завершает управляющую структуру в той же строке, инструкция должна быть закончена точкой с запятой.

Многострочная управляющая структура имеет форму :

    nom-structure expression [:]
      ... instructions ...
    /nom-structure
Двухточечный параметр не является обязательным (если только инструкция не находится в одной строке).

Пример с разделителями:

   if a = b : print t ; /if


Узел: If, Next: , Previous: Контрольные структуры, Up: Top

Тис

Условная управляющая структура от строки до фигуры :

    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 ...
  /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


Узел: If composite, Next: For in, Previous: If, Up: Top

Если составная

Конструкционный коммутатор С++ или 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


Узел: For in, Next: by, Previous: If composite, Up: Top

Для

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).
- f - имя функции.

Формат 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[]


Узел: Просмотр двухмерной таблицы, Next: , Previous: Scan by, Up: Top

Обзор двухмерной таблицы

Вот пример создания и просмотра двухмерной таблицы :

 array a = ( ("a", "b", "c"),("x", "y", "z"), (1, 2, 3))
Эта таблица содержит три dyn (динамические переменные), каждая из которых содержит одну таблицу.
scan a
  array x= a[]
  scan x
    print x[]
  /scan
/scan

Узел: While, Next: , Previous: Обзор двухмерной таблицы, Up: Top

Уайл

Управляющая структура while представляет собой условную петлю.

Синтаксис одной команды :

   while expression let instruction

Стандартный синтаксис :

  while expression [:]
     ... instructions ...
  /while

Пример :

  int x = 10
  while x <  20
     print x
     x + 1
  /while

Из петли выходит инструкция «break».
«Непрерывная» инструкция игнорирует все следующее и запускает новый цикл.


Узел: While let, Next: , Previous: While, Up: Top

While let

Этот синтаксис рекомендуется, чтобы избежать риска бесконечных петель.
Инструкция, которая изменяет значение протестированного выражения как условие итерации, перемещается после маркера/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 until, Next: Do case, Previous: While let, Up: Top

Do until

Блок инструкций между маркерами do/do - это новое пространство видимости, а инклоизированные инструкции вычитаются в зависимости от возможного условия.

Общий синтаксис :

  do
      ... instructions ...
  /do [ condition ]
и/do условие может быть упрощено до «until».
Блок инструкций выполняется до тех пор, пока условие является ложным, и оставляется, когда условие становится истинным.

Синтаксис do until :

  do
      .. instructions ...
  until expression

  do
    print x
    x + 1
  until x = 10


Узел: Do case, Next: синтаксис do, Previous: Do until, Up: Top

Do case

Это мощная конструкция «паттерн-спичинга». Он содержит одну или несколько групп, за которыми следует необязательная «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, Next: , Previous: Do case, Up: Top

Расширенный синтаксис do

Маркер конца do может быть дополнен условием, while или forever.
Блок инструкций будет выполняться хотя бы один раз и до тех пор, пока кондиция верна.

Синтаксис:

  do
     ... instructions ...
  /do while expression

  do
     print x
     x + 1
  /do while x < 3

Варианты - до .../до... блок инструкций с флажками или без них. - do .../do while forever... бесконечная петля. - до .../до навсегда... упрощенная бесконечная петля. бесконечный цикл требует «разрыва», чтобы прекратить выполнение.


Узел: Разрыв и продолжение, Next: Enum, Previous: Расширенный синтаксис do, Up: Top

Разрыв и продолжение

Команда для выхода из цикла.
Пример использования ключевого слова «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, Next: , Previous: Break и продолжить, Up: Top

Перечисление

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


Узел: Индексация, Next: , Previous: Enum, Up: Top

Индексация

Синтаксис подсказки в тексте или таблице: [подсказка]. Индекс должен быть простым выражением без вложенных скобок. Простое выражение - это литеральное число, идентификатор, вызов функции или арифметическое выражение и должно быть вычислено как целое число .


Узел: Интервал: Индексация, Вверх: Верхний

Интервал

Синтаксис интервала:

  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] = другой список


Узел: Интервалы в списке, Next: , Previous: Interval, Up: Top

Промежутки в списке

При индексировании списка нижний или верхний предел интервала может быть опущен.

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"
Содержание а будет: «приставка».


Узел: Методы текста, Next: переменная, Previous: Text, Up: Top

Методы текста

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.
----------------------------------------------------------------------------



Узел: Динамическая переменная, Next: : Методы текста, Up: Top

Динамическая переменная

Заявлены с типом: 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 (возвращает тип типизированного массива).


Узел: Последовательность и список, Next: , Previous: Динамическая переменная, Up: Top

Последовательность и список

Последовательность - это статический (текст) или динамический (массив или дикт) список.
Списки и последовательности имеют одни и те же операторы, кроме # и |. Операции в списках:

  []   : 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


Узел: Индексировать таблицу, Next: , Previous: Создать таблицу, Up: Top

Индексировать таблицу

Элементы массива доступны целым числом.
Синтаксис:

  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), как показано ниже.


Узел: Итератор, Next: , Предыдущий: Индексировать таблицу, Вверх: Вверх

Итератор

Содержимое таблицы может просматриваться итератором.
На первый элемент указывают методом 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).


Узел: Операторы массива, Next: таблица, Предыдущий: Интервал в таблице, Вверх: Верхний

Операторы массива

Вместе с операторами + и - можно добавить или удалить элемент или группу элементов.

Пример :

  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).


Узел: Многомерная таблица, Next: , Previous: Операторы таблицы, Up: Top

Многомерная таблица

Количество измерений не ограничено. Для двухмерной таблицы синтаксис для...
- доступ к элементу: x = nomarray [i] [j]
- изменить элемент: nomarray [i] [j] = x
Для создания элемента синтаксис :

  nomarray[i] = array()
  nomarray[i][j] = x
  ou
  nomarray[i] = array(x)
Невозможно создать элемент непосредственно в несуществующем подчиненном массиве. Индексы i и j предполагают, что уже существуют i и j элементы.


Узел: Содержимое таблицы, Next: , Previous: Многомерная таблица, Up: Top

Содержимое таблицы в PHP, шаг за шагом

Нам нужно знать, как изменяются целые ключи массива в 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 одинаковые методы, но некоторые более полезны с тем или иным типом.


Узел: Создать словарь, , Previous: Dictionary, Up: Top

Создать словарь

Диктант можно создать из литерала или конструктора.

Синтаксис:

  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.


Узел: Интервал в диктате, Previous: Индексировать диктант, Up: Top

Интервал в диктате

Обычный способ использования словаря - с помощью ключей или итераторов. В некоторых случаях может пригодиться прямой доступ к интервалу значений.
- При добавлении элемента или другого диктанта к диктату, с помощью интервалов, 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 () перемещает указатель в конец .


Узел: Методы массива и диктата, Next: таблицы, Previous: Интервал в диктанте, Up: Top

Методы массива и диктата

Return  Name              Action
dyn     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


Узел: Типизированные таблицы, , Previous: Array и dict, Up: Top

Типичные таблицы

Типизированная таблица содержит уникальный тип объектов. Это гораздо эффективнее, чем общая таблица, потому что она индексируется, а не ассоциативно, и содержит непосредственно 32 или 64-битные объекты или указатели, а не динамические объекты (dyn).
Массив целых чисел в 100 раз быстрее стандартного массива для бинарных исполняемых файлов, но разницы в PHP нет.
Типизированные таблицы также динамичны, размер не предопределен и не ограничен.


Узел: Конструктор и литерал, Next: , Предыдущий: Типизированные таблицы, Вверх: Топ

Строитель и литерал

Заговорщик типичной картины имеет форму :

  type(...éléments...)

Exemple:

  int(1, 2, 3)
Количество элементов от 0 до n.

При наличии одного элемента нет разницы между типичным конструктором массива и скалярным конструктором :

  int(1)
  text("text")
Это не проблема при назначении, так как из скалярного можно создать одноэлементный массив, но в выражении есть двусмысленность.
Также в выражении нужно использовать дословный массив :
  type{...éléments...}
Объятия имеют значение «картина».


Узел: Вся таблица, : Конструктор и литерал, Up: Top

Таблица целых чисел

Синтаксис для объявления массива целых чисел :

  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


Узел: Назначение и преобразование, Next: Previous: Objects, Up: Top

Назначение и преобразование

Для смешанной таблицы можно назначить типизированную таблицу:
Пример :

  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


Узел: Типизированная таблица и dyn, Next: assignment, Previous: Назначение и преобразование, Up: Top

Типовая таблица и dyn

Можно назначить типичную картину дин.

  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


Узел: Прямое назначение, Next: , Previous: Типичная таблица и dyn, Up: Top

Прямое назначение

Для совместимости с PHP добавление элемента в массив, превышающий текущий размер, имеет тот же эффект, что и добавление этого элемента, независимо от указанного индекса.
Например:

 int[] i = nil
 i[10] = 10                         équivaut à:  i.push(10)

Складывание значений - правильный способ заполнения таблицы.

Если мы действительно хотим поместить элемент в заданное положение, мы должны заполнить таблицу нулевыми значениями...

 for int k in 0 .. 10 let i.push(0)
Теперь можно поместить элемент в положение 10.


Узел: Ограничения и совместимость, Next: , Previous: Прямое назначение, Up: Top

Ограничения и совместимость

- Метод нельзя применить непосредственно к указываемому элементу.

  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» не работает, когда массив содержит объекты, поэтому вычитать такие массивы невозможно.


Узел: Файл, Next: , Previous: Ограничения и совместимость, Up: Top

Ряд

Файл является виртуальным объектом для обработки локальных или удаленных файлов.
Полное объяснение файловой системы см. в разделе «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 и интерпретатором.


Узел: Read, Next: Write, Previous: File, Up: Top

Чтение

Файл можно читать по строкам или по бинарным блокам.
В первом случае используется метод readLine (), в противном случае используется метод read с размером блока в параметре.
Код конца строки в файле включен, и может быть удален методом rTrim ().

Примеры :

 text t = nomfic.readLine()            lecture d'une ligne de texte.
 text t = nomfic.read(1000)           lecture de 1000 octets.


Узел: Write, Next: Dir, Previous: Read, Up: Top

Write

Метод 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, Next: , Previous: Write, Up: Top

Дир

Тип 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


Узел: Ошибка управляющей структуры, Next: , Previous: Dir, Up: Top

Ошибка управляющей структуры

После открытой инструкции конструктор 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()
Если файл не найден или его нельзя открыть, программа останавливается.


Узел: Scopes, Next: , Previous: Управляющая структура error, Up: Top

Области

Правила видимости относятся к основным процедурным языкам, а не к языкам сценариев.
Скриптол добавляет правила безопасности, он не позволяет присвоить одно и то же имя двум объектам во вложенных областях (например, в глобальной области и функции). Но одни и те же имена могут повторяться в последовательных местах.

Есть четыре уровня видимости: - глобальный, - класс, - тело функции, - и тело управляющей структуры .

Видимость переменной - это уровень, на котором она объявляется: Глобальный, класс, функция или ограниченный блок (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.
Их видимость является внешней, поэтому они видны как глобальные объекты класса.


Узел: Переменные и константы, Next: , Previous: Extern, Up: Top

Переменные и константы

Переменные и константы 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++


Узел: Функции, Next: класс, Previous: Переменные и константы, Up: Top

Внешние функции

Функции 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


Узел: Внешние типы, Next: кода, Previous: Внешний класс, Up: Top

Внешние типы

C++ позволяет определять типы с директивами «typedef» и «# define». Эти новые типы можно интегрировать с выделенной инструкцией Script.
Пример: define uint
Это соответствует «# define uint unsigned int» в C++.
Ни один код не генерируется инструкцией define: Код C++ должен находиться в файле C++ для включения. Подробности см. в разделе «Неисправность инструкции».


Узел: Вставка целевого кода, Next: , Previous: Внешние типы, Up: Top

Вставить целевой код

Если вы хотите вставить PHP код непосредственно в вашу программу, используйте ~~ символы, чтобы определить начало и конец кода, который нужно включить.
Компилятор игнорирует содержимое, как будто это комментарии, но включает его в генерируемый код, PHP или C++.

В одну программу можно вставить определенный код PHP или C++.
- Для вставки PHP-кода используйте:
require_once («lecode.php»)
Эта инструкция имеет эффект только для интерпретатора PHP, скомпилированного в C++, она игнорируется.
- Чтобы вставить код C++, используйте:
# include «лекодe.c + +»
Это будет составлено в C++, но для интерретора PHP это комментарий.


Узел: Класс, , Предыдущий: Вставить целевой код, Вверх: Вверх

Класс

Класс - это структура, которая содержит переменные (атрибуты) и имеет функции (методы).
После определения класса он становится новым сложным типом языка, с помощью которого объявляются объекты, экземпляры класса. Атрибуты и методы объекта используются с командой фигуры :

  x = objet.attribut
  objet.methode()


Узел: Определение класса, Next: , Previous: Class, Up: Top

Определение класса

Описание класса начинается с ключевого слова «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()


Узел: Конструктор и экземпляр, Next: методы и атрибуты, Previous: Определение класса, Up: Top

Конструктор и экземпляр

Конструктор - это метод с именем класса, который вызывается при создании экземпляра класса.
У него всегда есть тип возвращения «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()


Узел: Статические методы и атрибуты, Next: , Ранее: Конструктор и экземпляр, Вверх: Сверху

Статические методы и атрибуты

Может быть удобно собрать в один класс все функции, касающиеся задачи, и объявить их «статичными». Эти функции можно вызвать непосредственно с именем класса без необходимости создания экземпляра.

Пример :

  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


Узел: Перегрузка, XML, Previous: Наследование, Up: Top

Перегрузка

Метод можно переопределить с разными аргументами, как в одном классе, так и в производных классах. Тип возврата всех версий метода должен быть одинаковым.

Пример :

  void ajoute(int x, int y)
  void ajoute(real x, natural y)

Просто нужно вызвать метод «добавить» с нужным типом аргументов, компилятор связывает соответствующее определение...
Для целевого языка C++ требуется, чтобы перегруженные методы имели тот же тип возврата, который сохраняется в Script.


Узел: Статический XML, Next: , Previous: Перегрузка, Up: Top

Статический XML

ПРИМЕЧАНИЕ: Статический XML реализуется в интерпретаторе только на данный момент.
Двоичный компилятор Script использует класс dom с аналогичными методами и требует файла libdom.sol, описывающего класс.
Компилятор Script в PHP в данный момент не распознает XML.
В будущем данная глава будет применяться и к компиляторам.

XML - это структура данных в Script. XML-документ определяется как легкий, а затем используется для хранения и доставки данных, просто как класс, с большей гибкостью.
XML-документ может использоваться статически, изменяются только содержимое элементов и значения атрибутов.

Доступ к элементу осуществляется по сгруппированному списку имен элементов, содержащих этот элемент.

  dom.document.client.getData()

Методы также позволяют изменять структуру, добавлять или удалять элементы. Об этом говорится в разделе «Динамический XML».


Узел: XML light, Next: , Previous: Статический XML, Up: Top

Светлый 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-документа, Next: : XML light, Up: Top

Определение XML-документа

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

Экземпляры создаются во время компиляции, изменения в документе во время выполнения не будут найдены в экземплярах.


Узел: Загрузка и резервное копирование, Next: Previous: Определение XML-документа, Up: Top

Загрузка и резервное копирование

Внешние документы загружаются в программу Script с методом «load», а имя файла или путь - в параметр.

  xml x
  /xml
  x.load("demo")

ou:

  x xinstance
  xinstance.load("demo")

Документ, загруженный и завершенный или определенный в источнике Script, сохраняется с использованием метода save и имени файла или пути в качестве параметра .


Узел: Назначение XML, Next: , Previous: Загрузка и резервное копирование, Up: Top

Назначение XML

Можно назначить XML-экземпляр документа. Для этого необходимо объявить основной документ XML пустым, чтобы объявить экземпляр, прежде чем назначать его.

Пример с указанным выше названием.

  xml dom
  /xml

  dom instance1 = nomdocument

Содержимое «instance1» теперь является содержимым документа «nomdocure».
Вы можете создать столько экземпляров «дома», сколько хотите.


Узел: Итератор XML, Next: , Previous: Назначение XML, Up: Top

Итератор XML

Итератор - это набор методов, которые можно использовать с методами тегов.
Методы тегов связаны с именем документа или экземпляра документа, но относятся к указываемому в данный момент тегу.
Для просмотра содержимого документа или экземпляра используется итератор, состоящий из нескольких методов :

  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 () возвращает текущий элемент в начало документа .


Узел: Использование данных, Next: , Previous: XML-итератор, Up: Top

Использовать данные

Доступ к содержимому элемента осуществляется двумя методами тегов - getData и setData :

  text getData()            retourne le contenu.
  void setData(text)       change le contenu.

Эти методы связаны с именем документа или экземпляра и касаются текущего элемента.

  nomdocument.getData()
  instance1.setData("quelque texte")


Узел: Использование атрибутов, , Previous: Использование данных, Up: Top

Использовать атрибуты

Можно получить доступ к такому атрибуту, как элемент словаря. Атрибут распознается по имени в параметре функции getAttribute () или setAttribute ().

  xml doc
      elem1  att = "valeur"
      /elem1
  /xml

  print doc.getAttribute("att1")
  doc.setAttribute("att1", "nouvelle valeur")


Узел: XML и функция XML, Предыдущий: Использовать атрибуты, Вверх: Вверх

XML и функции

В качестве аргумента функции можно использовать экземпляр XML-документа и возвращать его через функцию.
Аргумент является новым экземпляром, а не указателем на исходный экземпляр, и возвращенный объект также является новым экземпляром.

В функции можно определить XML-документ. Если документ должен быть возвращен функцией, то для увеличения скорости выполнения будет возвращен указатель на документ.

xml dom
/xml

dom mafonction()
	xml demo
		nomelement
			"contenu"
		/
	/xml
return demo

dom x = mafonction()
print mafonction()


Узел: Динамический XML, Next: , Previous: XML и функция, Up: Top

Динамический XML

В этой главе описаны функции для изменения структуры XML-документа или экземпляра.

void clear () Стирает содержимое документа.

Надстройка XML (XML)
Добавление потомка к текущему элементу документа. Новый элемент становится текущим элементом.

  xml demo
	  doc /
  /xml

  xml element
	inner
	   "quelque texte"
	/inner
  /xml

  demo.addChild(element)
  

xml addNext (xml)
Добавляет элемент после текущего элемента документа.
Новый элемент становится текущим элементом документа.


Узел: Методы XML, Next: , Previous: Динамический XML, Up: Top

Методы 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.

------------------------------------------------------------------------------------


Узел: Include, Next: , Previous: XML, Up: Top

Включено

Синтаксис для включения внешнего файла Script :

  include "nomfichier.sol"

Скобки необязательны. Необходимы одинарные или двойные кавычки. Если ты хочешь использовать PHP-файл напрямую, а компилятор его не обрабатывает, см. ниже.
Только файлы с расширением «.sol» будут обрабатываться компиляторами, если оно другое:
- solp (php) игнорирует инструкцию.
- solc (c++) передаст инструкцию компилятору C++.
Если, напротив, ты хотел включить файл в сформированный PHP-код, а не в код C++, ты можешь использовать функцию require_once («имя файла»), которая будет проигнорирована компилятором в C++ solc, так как динамическая вставка не может быть выполнена в C++.


Узел: Define, Next: : Include, Up: Top

Отключено

Эта инструкция позволяет определить новые типы, которые парсер может распознавать, например примитивы или классы.


Узел: Использование функции в качестве переменной, Next: : Define, Up: Top

Использование функции в качестве переменной

Можно использовать функцию в качестве аргумента другой функции, определив ее как тип. Это работает только на глобальном уровне, а не в классе. После определения типа его невозможно переопределить.

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 )


Узел: Использование внешнего типа, Next: библиотек, Previous: Использование функции в качестве переменной, Up: Top

Использовать внешний тип

Синтаксис:
define NOVINTYPE
define NOVINTYPE as
создает новый тип, который можно использовать в аргументах внешних функций. См. примеры GTK по использованию внешнего типа.
Модификатор «as» приводит к тому, что новый тип не считается указателем. Так что использовать ее как примитивную, например, как уинт или гинт.


Узел: Использование стандартных библиотек, Next: PHP Library, Previous: Использование внешнего типа, Up: Top

Использовать стандартные библиотеки


Узел: Библиотеки PHP, Next: C, Previous: Использование стандартных библиотек, Up: Top

Книжные магазины PHP

Скриптол может использовать функции PHP. Контроль аргументов и типов возврата функций PHP не осуществляется.
Просто нужно настроить php.ini, чтобы расширения были видны интерпретатору PHP.
Наиболее обычные функции PHP включены в библиотеку Script.
Для использования функций PHP-библиотек в исполняемой программе потребуется написать интерфейс для включения в проект. phpgd.h и phpgd.cpp - пример.


Узел: Библиотеки C, Next: функции, Предыдущие: Библиотеки PHP, Вверх: Топ

Книжные магазины C

Библиотека функций в 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 ).


Узел: Обычные функции, Next: XML, Previous: Library C, Up: Top

Обычные функции

Эти функции являются общими для 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, Next: , Previous: Обычные функции, Up: Top

Встроенный XML (только скриптол C++)

Эту главу заменят главы «Статический 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


Узел: Добавление I, II, Previous: integrated XML, Up: Top

Добавление I: Использовать API Java с Script

Скриптол реализует объявление объектов 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.


Узел: Добавление II, Предыдущий: Добавление I, Вверх: Верхний

Добавление II: Управление исключениями

Обработка исключений поддерживается только целевыми языками C++ и PHP 5.
Синтаксис:

  extern
     class exception
       string what()
     /class
  /extern

  try
     ... quelques instructions ...
  catch(exception e)
     print e.what()
  /try


Узел: Добавление III, IV, Previous: Appendment II, Up: Top

Добавление III: Иностранные языки

Препроцессор позволяет писать скриптольные программы с ключевыми словами на любом языке.
Для его использования необходимо:
1) список ключевых слов.
2) параметр -t в командной строке (не работает с вариантом -w).
3) запись в файле solc.ini или solp.ini (или .cfg) фигуры:
Keywords = расширение
Расширение - двухбуквенный код в зависимости от используемого языка, пример:
Keywords = fr... для французского языка.
Первоначальный список ключевых слов находится в файле «keywords.en». Если в языке, который ты хочешь использовать, нет списка, его нужно создавать с каждым иностранным словом, за которым следует английский эквивалент (взять keywords.fr в качестве примера).
Если файл «.ini» или «.cfg», характерный для источника, не имеет записи Keyword, параметр -t будет пропущен для этого файла.


Узел: Добавление IV, , Previous: Appendment III, Up: Top

Добавление IV: Устаревший синтаксис

- символы <- и ->.
- ключевое слово string заменяется на cstring.
- внешние объявления char * заменяются cstring.
- оператор спички и его определение устарели.
- методы на числах бесполезны и подавлены.
- используется () для пустого массива. Использовать {} или массив ().
- префикс для строки PHP устарел и бесполезен.


Узел: Индекс, Предыдущий: Приложение IV, Вверх: Топ

Индекс