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

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

Это руководство относится к языку Script 2. О том, как использовать компилятор до 2014 года, читайте в руководстве Script 1.

Язык полностью реализован в компиляторе Script в JavaScript.
Включение в веб-страницу возможно только с компилятором Script в PHP или JavaScript.

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

Резюме

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

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

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

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

Компиляция программы Script в JavaScript

Для запуска командной строки необходимо установить Node.js. Этот параметр устанавливается автоматически после загрузки в Windows. В Linux необходимо ввести следующую команду:

sudo apt-get install nodejs

Или эквивалент, в зависимости от распределения .

Для компилирования программы в JavaScript команда:

solj [options] nomfichier 

Если источник уже компилирован, интерпретируется программа JS, иначе она компилируется перед интерпретацией, если нет ошибки.
Пока у источника есть ошибки, новая команда «solp nomficher» скомпилирует ее. Если источником является HTML-страница, она не запускается после компиляции.

Параметры компилятора:

 aucune: compile un script en PHP/JavaScript ou le lance si déja compilé.
 -w     compile du code inclus dans une page et crée un fichier HTML.
 -j     génère un fichier JavaScript à inclure dans une page HTML.
 -r     force l'exécution. Compile si besoin seulement.
 -c     recompile le fichier et fichiers inclus. Le programme n'est pas lancé.
 -v     affiche plus d'informations lors de la compilation.
 -q     pas de message de compilation.

Эти буквы можно объединить в один вариант. Таким образом, -be эквивалентно -b -e.

В Powershell команда:

invoke-expression "solj [options] filename" 

Изменение расширения и времени выполнения

Файл solj.ini может указать путь к файлу скриптол.js и расширение созданного HTML-файла. Например:

lib="c:/scriptolj/scriptol.js
htmlext=".php" 

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

В Windows команда:

solp [options] nomfichier

Те же параметры, что и в JavaScript .

В Powershell команда:

invoke-expression "solp [options] filename" 

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

Источник Script - это просто текстовый файл, содержащий команды inside, по одной за строку.
Примеры :

   print x * 2
   print x + (y / 2)

С помощью текстового редактора, например Advanced Editor, введите следующую строку:

   print "Bonjour le monde"

Сохранить в файле bonjour.sol.

При работе в окне командной строки (MS-DOS под Windows, консоль под Unix) просто введите :

   solj bonjour         ...ou
   solp bonjour

Также можно построить исполняемый файл с помощью команды :

   solc -bre bonjour

и запустите созданную программу bonjour.exe.

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

Проект Script

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

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

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

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

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

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

  main()     // lancement du programme.

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

Скриптол можно определить как:

Чувствительность к регистру:

Идентификаторы:

Числа:

Это зависит от целевого языка.

Преобразование (cast):

Объект-ориентированный:

Ориентированный на XML:

Реактивное программирование

HTML-страница

Чтобы код Script можно было скомпилировать в PHP на HTML-странице, он должен быть включен в следующие теги :

<?sol
   ... code scriptol ...       
?>

Последняя строка сценария Script должна быть закончена точкой с запятой или разрывом строки перед символом?>

Тестирование HTML-страниц Если ты установил на компьютер такой сервер, как Apache или Xitami или Windows Server, и настроил его на распознавание расширения php, твой код будет обработан как в Интернете, после компилирования в PHP. В противном случае он перенаправит вас в тестовый файл. HTML динамической страницы, а затем выполнить PHP код :

solp -w mapage
php mapage.php > test.HTML

Для компиляции кода Script в JavaScript на HTML-странице поместите его в следующие маркеры:

<scriptol>
... code scriptol ...
</scriptol> 

Подготовка

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

Комментарий

 Авторское право: Символ # помещается в начале строки с комментарием в той же строке. Этот тип комментария остается в целевом коде.

 Следующие комментарии исходного кода не сохраняются на целевом языке:

//комментарий идет от символа до конца строки.

/ * и */содержат комментарий по нескольким строкам.

Символы

Язык Script никогда не использует один и тот же символ для концептуально разных целей.

+     addition
-     sousctraction
*     multiplication
/     division
=     opérateur d'assignement.
<     moins que.
>     supérieur à.
<=    inférieur ou égal.
>=    supérieur ou égal.
;     est un terminateur d'instruction.
,     sépare les éléments d'un initialiseur ou d'un tuple.
:     attache un corps à une en-tête, une valeur à une clé...
.     associe la référence d'une méthode à  un objet.
()    regroupe des sous-expressions, les paramètres d'une fonction.
..    sépare les limites d'un intervalle.
--    intervalle avec la limite supérieure non incluse.
[]    contiennent un index ou un intervalle.
?     sépare condition et action dans une structure d'une  seule ligne.
<>    opérateur de différence.
&     et binaire ou intersection de tableaux.
|     ou binaire ou union de tableaux.
<<    décalage à gauche.
>>    décalage à droite.
and   et logique (sur valeurs booléennes).
or    ou logique.
not   négation logique.
mod   modulo  (C utilise %).
^     xor.
#     commentaire de copyright.
//    commentaire de code source sur une ligne.
/* */ commentaire sur plusieurs lignes.
~~    début et fin d'un bloc de code cible à insérer. 
`     début et fin d'un template, chaîne sur plusieurs lignes

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

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

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

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

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

var        élément générique de array ou valeur de dict.
number     toute sorte de nombre (jusqu'au double du C++).
int        un nombre arrondi à la partie entière sur 32 bits. 
integer    identique.
natural    entier non signed de 64 bits sauf 0. 
real       un nombre avec des décimales.
boolean    la valeur vrai ou faux.
text       une chaîne de caractères. 
array      une liste dynamique indexée d'objets.
dict       une liste associative formée de couples clé:valeur.
react      une variable reactive.
file       un fichier.

При импорте С используются другие специальные типы :

byte       type externe de C.
cstring    utilisé dans les déclarations externes en langage C (traduit par char *).

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

int(int | number | text)

Примеры :

int("123")         ...représente le nombre 123
text(10)           ...représente la chaîne "10".

Примитивы - это переменные, если они явно не объявлены постоянными, с ключевым словом const.

Буквальные

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

123          entier (int)
123n         naturel (natural)
123.0        réel (real)
0.123        réel (real)
1.2e10       réel (real)
0xf8         hexadécimal
0b011        binaire   
true/false  booléen (boolean)

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

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

Пример :

  print "abc$xyz"
  print 'abc$xyz'

в обоих случаях отображается abc $ xyz .

Коды выпуска

Для символов, которые нельзя поместить непосредственно в текст, используется специальный код :\Например, для отображения гильзы напишем: "abc\" def "

   \"      insère un guillemet double.
   \'      insère un guillemet simple.
   \n      insère a retour à la ligne.
   \t      insère une tabulation.
   \\      insère l'anti-slash lui-même.

Предположим, вы хотите присвоить переменную a именно с этим текстом: моя «симпатичная» машина. Вы не можете поставить его в кавычки: a = «моя «красивая» машина» Компилятор не будет знать, как с ним обращаться! Специальный код используется для того, чтобы сказать, что кавычки находятся в тексте, а не ограничивают его, это\a = "ma\" jolie\" автомобиль" Вы также можете чередовать типы кавычек: a = "ma 'jolie" автомобиль "или a =" ma "jolie" автомобиль "

Мульт-линии

Текст также может быть распределен по нескольким строкам в символах ', например, в ECMAScript 6.

Пример:

x = `
     ligne 1
     ligne 2
    `

Возврат на линию может быть прямым или введенным кодом выпуска.

x = "un\ndeux"            ...valide
x = "un
deux"                          ... non valide

x = `un
deux`                       ... valide

Переменная в строке

Если строка заключена в двойные кавычки, то последовательности символов, начинающиеся с $, являются именами переменных .

   text xyz = "def"
   text t = "abc$xyz"

Присваивается строка «abc», за которой следует содержимое переменной abc. Это так называемая строковая интерполяция.

Символы {} имеют особое значение для интерпретатора PHP, и их следует избегать в двойной строке с символом\.

Тексты в простых кавычках, которым предшествует $, вообще не интерпретируются.

  text t = 'av$er\n'

показать: av $ er\n

Декларация

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

type nom [ = valeur ]
int x
text t = "demo"

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

type nom [= value], name [= value], etc...
int x = 1, y, z = 2

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

int x, y = 0, 0      // non valide

В то время как признается следующее:

text a = "a"
text b = "b"
text c, d
c, d = [a, b]

Константа

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

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

const type nom = valeur
const int X = 1
const boolean B = true
const text T = "texte quelconque"

Константы обычно заглавными буквами.

Есть предустановленные константы, которые являются ключевыми словами языка:

true        correspond à une expression vraie.
false       le contraire.
zero        la valeur 0.
nil         objet non trouvé dans une séquence (Not In List)ou symbole de suppression.
null        assigné à un objet quand il n'est pas encore initialisé.

PI - заданная константа для представления математического символа.

Нил и ноль

Nil означает «не в списке», в то время как null означает «не имеет значения» или «объявлен, но не определен».

Нил - не настоящая ценность, а скорее конструкция языка. При чтении он указывает на то, что объект не найден при поиске в списке. Запись позволяет удалить элемент или интервал из списка. Невозможно инициализировать переменную с помощью nil.

Обычные примеры:

array a = [1,2,3,4,5]
a[1..3] = nil

Сейчас содержание таблицы составляет [1,5].

int i = "démo".find("x")
if i = nil print "Non trouvé"

Так как «x» не находится в тексте «демо», появится сообщение «Не найдено».

Вот значения нила в разных контекстах...

При создании кода C++ nil заменяется следующими значениями :

 boolean      false
 int          -1
 natural      -1
 real         -1
 text         ""
 array        []
 dict         {}
 file         null
 dir          null
 objet        null
 var          selon le type du contenu.

При создании PHP-кода nil заменяется false для числа, на «» для текста.

Когда генерируется код JavaScript, nil стоит -1 для числа, «» для текста.

Ноль

Ключевое слово null преобразуется в «null» в PHP, «NULL» в C++ и «undefined» в JavaScript;

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

Пример использования:

text a = null

Переменная «a» может быть назначена, но привязана только для сравнения с нулевым значением, иначе появится сообщение об ошибке.

Назначение

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

identifieur = expression

Назначенное значение должно иметь тип переменной :

   int i = 10
   int j = "343"            ... incorrect

Однако строители примитивов позволяют делать преобразования.

Увеличение назначения

Когда операция выполняется над переменной, и результат, назначенный той же переменной, можно упростить инструкцию, увеличив назначение (из одной операции).

Синтаксис увеличенного назначения :

   identifieur opérateur expression

Например, добавить 10 к x и поместить результат в x. Вместо того, чтобы писать x = x + 10, мы напишем проще: x + 10

Возможные операторы: + - */mod <<>> & | ^ #
Примеры :

  a = 1              ... donne à a la valeur 1.
  a + 1              ... ajoute 1 à a.
  x * y               ... remplace le contenu de x par le résultat x * y.
  a * (x + 2)       ... multiplie a par l'expression.
  a = a * (x + 2)  ... comme ci-dessus.
  a & b               ... remplace le tableau a par l'intersection des tableaux a et b.

Обратите внимание, что в тесте условий x + 10 просто возвращает результат добавления 10 к содержимому x, не изменяя x. В увеличенной инструкции этот результат присваивается x.

  if x + 1 : ...     ici x n'est pas modifié.

Множественные назначения

Кортеж значений может быть назначен группе переменных. Синтаксис и пример :

   nom [, nom]* = expression [, expression]*

   x, y, z = 1, x2, 8

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

   x, y, z = 0
   a, b = mafonction()

Вместо кратного объявления множественное назначение может быть выполнено с переменными разных типов.
Пример :

  int x
  text t
  x, t = 1000, "abc"

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

  x, y, z = array(1, 2, 3, 4)

Эквивалентно: x = 1, y = 2, z = 3 .

  x, y, z = array(1)

Эквивалентно: x = 1.

Можно назначить несколько переменных одновременно с помощью: - значение или выражение.
- один массив
- значения диктанта (использовать метод values ()).
- вызов функции.
- кортеж значений или выражений, разделенных запятыми.
В случае массива или диктата, кортежа, функции, возвращающей несколько значений, переменные 1-n присваиваются элементам 1-n в одном порядке. Если число не совпадает, это ошибка.
Если функция возвращает только одно значение, то одно и то же значение присваивается всем переменным слева.

Разрушающее назначение

Можно назначить несколько переменных одновременно из нескольких других или одинаковых в другом порядке. Пример:

var a = "alpha"
var b = "beta"

a,b = [b, a]
print a, b

Что покажет: бета, альфа.

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

Операторы

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

   =    (égal)
   <    (inférieur)
   >    (supérieur)
   <=  (inférieur ou égal)
   >=  (supérieur ou égal)
   <>  (différent)

Оператор «in» проверяет наличие элемента в последовательности: текст в тексте, объект в массиве, значение в промежутке.

   if "a" in line  print "dans le texte"
   if x in 1..10  print "dans l'intervalle"

Двоичные операторы:

  &  (et)
  |  (ou)
  ^  (ou exclusif)
  ~  (non)
  << (décalage à gauche)
  >> (décalage à droite).

Операторами массива являются :

   &  (intersection)
   |  (union)
   ^  (complément d'intersection).

Прецедент

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

Выражение

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

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

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

  +
  -
  *
  /
  ^        puissance
  mod     modulo, retourne le reste d'une division...
 

Пример:

   print 100 mod 3     ... affiche 1 le rester de  100 divisé par 3.

Реляционные выражения

Арифметические выражения можно сравнить с помощью набора операторов :

  =    égal
  <    inférieur à
  >    supérieur à
  <=  inférieur ou égal
  >=  supérieur ou égal
  <>  différent

Сравнение возвращает логическое значение: true или false (true или false). Это логическое значение может быть присвоено логической переменной или использоваться в качестве условия управляющей структуры, например «if».

Логические выражения

Логическое выражение - это сочетание логических значений или выражений (реляционных или логических) и логических операторов.
Логическими операторами являются:

  and     et
  or       ou
  not     non

Выражение «и» возвращает истину, если оба термина верны, если нет.
Выражение «or» возвращает истину, если одно из двух терминов верно, ложно, если оба являются ложными.
Пример :

   boolean x = true
   boolean y = false
   if x and y print "vrai"; else print "faux"           ... doit afficher faux
   not(x or y)          ... est faux
   x and not y          ... est vrai

Двоичные выражения

Бинарные операторы - это те, которыми пользуется большинство языков :

 &  et binaire
 |  ou binaire
 ^  ou exclusif
 ~  négation binaire
 << rotation à gauche qui équivaud à multiplier par 2
 >> rotation à droite qui équivaud à diviser par 2

Текстовые выражения

Текстовые операторы :

 =, <, >, <=, >=   comparaison de deux textes.
 +                 concaténation de deux textes.
 []                indexation, slicing ou splicing (voir chapitre Text).
 in                teste si un text fait partie d'un autre.

Пример :

 text t = "préfixe"
 print t + "suffixe"
 ...affichera: préfixesuffixe

Выражения динамических списков

Операторы списков (array, dict):

= < > <= >= <>  compare les valeurs de deux listes.
+               concatène deux listes (des doubles peuvent en résulter).
-               enlève d'une liste les éléments d'une autre (sauf doubles).
[]              indexation, slicing or splicing (voir Array et Dict).
in              teste si un élément est dans la liste.
&               intersection.
|               union.
^               complément d'intersection.

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

Прецедент

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

  if not a and b
  if not (a and b)

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

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

Функция

Функция определяется с помощью интерфейса, указывающего, как ее вызвать, набора инструкторов, и заканчивается ключевым словом «return».
Требуется тип возврата и тип параметров. Используется «void», если функция ничего не возвращает.

Синтаксис:

  type [,type]* nom ( paramètre [, paramètre]* ) [:]
    ... instructions ...
  return [expression [, expression]*]

Пример :

  int multiply(int x, int y)
     int z
     z = x * y
  return z
 

Это можно написать проще:

  int multiply(int x, int y)
  return x * y

Тело функции представляет собой список инструкций, включающих при необходимости инструкции «return».
Конец определения - это возврат с нулем, одним или несколькими значениями.

return
return x
return x, y, 5

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

Пример:

  text, int, int coordonnees(int num)
    int x = matable[num].x
    int y = matable[num].y
  return "coordonnées=", x, y

Вызов функции

Вызов функции может назначить ноль, одну или несколько переменных.

   mafonc()
   a = mafonc()
   a,b,c = mafonc()

Псевдоним: переход по значению или по ссылке

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

  void mafonc(number x)
    x + 1
    print x
  return

  void foncalias(alias number x)
    x + 1
    print x
  return

  number y = 5
  mafonc(y)
  print y
  ... doit afficher 6 puis 5

  foncalias(y)
  print y
  ...  doit afficher 6 puis 6.

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

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

 type [,type]* nom(type nom [= expression] [, type nom [= expression]]* )

Пример:

  int increment(int x, int y = 1)
    x + y
  return x
  print increment(10, 5)          ...affichera:  15
  print increment(10)             ...affichera: 11

Для замены отсутствующего параметра было использовано значение по умолчанию 1.

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

Пример:

  void param(dict parlist)
    taille = parlist["taille"]
    nom = parlist["nom"]
    valeur = parlist["valeur"]
  return

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

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

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

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

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

  @mafonction(x, y)

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

Полезно иметь возможность переключать параметры на программу из командной строки.
Скрипт Script (например, PHP) использует переменную PHP $ argv". Чтобы имитировать то, как C++ переходит от параметров к программе, создать функцию «рука» и вызвать её с $ argv в аргументе (и $ argc при необходимости):

  int main(int argnum, array arglist)
    print argnum, "arguments"
    for arg in arglist
       print arg
    /for
  return 0

  main($argv, $argc) // $argv and $argc sont des variables système. Elles sont assignés automatiquement.

Функция main либо не имеет параметров, либо имеет два:

   int main()
   int main(int, array)

Тип возврата int является обязательным, если источник компилируется в двоичный файл .

Печать и эхо

Эхо

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

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

Пример:

  x = 5
  y = 20
  z = 1
  echo "values", x, y / 2
  echo z

На экране это будет выглядеть так:
значение 5101

Пример:

  echo "demo", 5
  echo "next"

отображение: demo5next

Печать

Более сложное отображение получается с помощью инструкции print. Выражения разделяются, и мы переходим к строке в конце инструкции.

Синтаксис: Печатное выражение [, выражение]

Пример:

  print "demo", 5

отображение: демо 5

Простая инструкция print без выражения отправляет возврат к строке.
Пример :

  print

Вклад

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

Пример:

  text name
  input name
  print name

Пример:

  input "who are you? ", name

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

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

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

 if
   if else /if.
   if une instruction.
   if composite.
 for
   for /for.
   for une instruction.
   - options: in intervalle, in séquence.
 while
   while let.
   while une instruction.
   while forever
 do while
   do until.
   do /do condition.
   do case / else / always /do.
 enum
   enum simple.
   enum dictionnaire.
 error
  error /error.
  error une instruction.

Только для JavaScript:

to for /to
to while /to
to une instruction 

Скриптол имеет другой синтаксис для управляющих структур инструкции или многострочных.

Управляющая структура одной инструкции имеет форму:

    mot-clé-de-structure expression let instruction
 ou mot-clé-de-structure expression ? instruction
 ou mot-clé-de-structure expression instruction commençant par un mot-clé.

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

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

    nom-structure expression [:]
      ... instructions ...
    /nom-structure

Двухточечный символ не является обязательным (если только инструкция не находится в одной строке).

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

   if a = b : print t ; /if

Тис

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

if condition ? instruction ; else instruction

Это гласит: если истинное состояние? тогда действие; в противном случае действия

Структура if then else может быть написана в более краткой форме:

if expression ? action1 ; : action2 

Примеры:

   if a = 5 ? break
   if a < 5 ? print "moins que"
      else print "plus que ou égal"
   if a = 1 ? print "un"; else print "plusieurs"

Мульт-линии

Синтаксис:

  if condition-booléenne [:]
    ... instruction ...
  else                                      ...optionnel
    ... instructions ...
  /if

N.B.: Двухточечный символ является необязательным после условия, как точка с запятой после инструкции, но он требуется при соединении строк.

Пример:

  if (x + y) > 8
    print "> 8"
    print x
  else
    print "<= 8"
  /if

  if (x + y) > 8 : print "> 8" ; print x ; else print "<= 8"; /if

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

Конструкционный коммутатор С++ или Java не существует в Script, так как слишком ограничен и бесполезен (в Script). Он воспроизводится более мощным вариантом конструкции if, который может проверить любой тип переменной и несколько жанров сравнений.

Синтаксис:

 if expression non-booléenne [:]
   operateur expression : instructions
   operateur expression : instructions
        ...
 else
   ... instructions ...
 /if

Не-логическое выражение - это переменная, литерал или любое выражение, которое не возвращает логическое значение true или false.
Ключевое слово «break» не помещается в конец группы, как в C. Разрыв приведет к выходу управляющей структуры, содержащей конструкцию if.
Допустимые операторы: =, <,>, <=,> =,! =, <>, in, else.
«else» здесь эквивалентен «default» коммутатора С.

Пример:

  if a
  = 1: print 1
  = 2: print 2
  > 2: print ">2"
  else print "<1"
  /if


  if x
  in array(1,2,3): print "premier"
  in array(4,5,6): print "second"
  in array(7,8)  : print "troisième"
  else print "autre"
 /if

Для

Citter Control Structure проводит либо интервал целых чисел, либо массив и по очереди присваивает каждый элемент переменной.

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

 for variable in début..fin [step s] [:]
   ... instructions ...
 /for

Начало, конец, и шаг (шаг) - это идентификаторы или литералы.
Шаг не является обязательным, значение по умолчанию - 1.
В интервал включается тонкая граница, если символ интервала - «».., а не если символ - «-».
Конец может иметь значение меньше начала, если присутствует «шаг» и содержит отрицательный шаг.
Переменная контейнера может быть объявлена в заголовке. В этом случае она локальна для контролирующей структуры.

Синтаксис для списка:

  for variable in expression-tableau [:]
     ... instructions ...
  /for

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

Примеры:

  for i in 1..10
      print i
  /for

 for w in montableau
    print w
 /for

 for w in arr1 + (arr2 & arr3[0..5])
    print w
 /for

Для инструкции

Короткий синтаксис инструкции:

  for variable in liste let instruction-basique

Примеры:

  for w in maliste let print w
  for x in 10..1 step -1 let print w + 10

Получить индекс и значение

Цикл для сканирования ассоциативной таблицы по значению. Это равносильно... из JavaScript, в то время как для.. in в JavaScript сканирует ключи.

for var v in d let print v        // affiche les valeurs 

Но ты можешь получить ключ и ценность:

for text k, var v in d let print k, ":", v // affiche clés et valeurs 

Это также работает на простой таблице:

array a = (10,20,30)
for int indice, int val in a
  print indice, ")", val
/for

Будет показано :

1) 10
2) 20
3) 30

Уайл

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

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

   while expression let instruction

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

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

Пример:

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

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

While let

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

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

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

  do
      ... instructions ...
  /do [ condition ]

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

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

  do
      .. instructions ...
  until expression

  do
    print x
    x + 1
  until x = 10

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, созданное вызываемой функцией.

До while

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

Синтаксис:

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

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

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

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

Команда для выхода из цикла.
Пример использования ключевого слова «forever» (навсегда), которое намеренно создает бесконечный цикл.

  int x = 0
  while forever
    print x
    if x > 100
      break
    /if
    x + 1
  /while

Когда x достигает значения 100, инструкция break приводит к тому, что программа прыгает за пределы/while, на инстутацию после структуры while.

Непрерывная

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

  int x = -1
  while x < 20
    x + 1
    if (x mod 2) = 0 continue
    print x
  /while

В этом примере отображаются только четные значения x, так как при обнаружении нечетного значения проверяется условие x mod 2 и выполняется непрерывная команда.
В этом примере я вставил приращение x в первую строку. Если бы это было размещено после продолжения команды, это привело бы к бесконечному закольцовыванию, поскольку было бы пройдено приращение. Синтаксис while.. Лет избегает этого.

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

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

Синтаксис:

enum
  identifieur [ : value | = value ]
  [ identifieur ...]*
/enum
  enum:
     Z,
     UN,
     DEUX,
     TROIS
  /enum

Это присваивает 0 Z, 1 UNE и так далее. Это эквивалентно:

  const int Z = 0
  const int UN = 1
  etc...

ou:

  enum: Z:0, UN:1, DEUX:2 /enum

Более сложный пример назначения разнородных значений и запуска последовательности:

  enum
    Z : "a0",                     ...  assigne a0
    UN  : "a1",                  ...  assigne a1
    TROIS,                        ...  assigne 0
    QUATRE : 3.15,            ...   assigne 3.15
    CINQ = 5,                     ...   assigne 5 et redémarre la séquence
    SIX                            ...   assigne 6
  /enum

Пример упрощенного синтаксиса в инструкции:

  enum ZERO, UN, DEUX, TROIS

Индексация

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

Интервал

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

  début..fin

Для указания списка заключены в квадратные скобки:

  nom-liste[début..fin]

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

  a[0 -- 100]        équivaud à [0..99]
  a[x -- y]            équivaud à a[x..y-1]

Анализ интервалов:

   0..10
   x..y
   x * 2 / 4 .. y + 10

Можно использовать интервал для:
- проверить, находится ли значение в диапазоне: if x in 10.. 100
- просканировать интервал: для x в 1.. 100
- извлечь часть списка: array b = a [x.. y]
- изменить часть списка: на [x.. y] = другой список

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

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

Il y a trois moyens pour découper une liste:
   array a = array(x0, x1, x2, x3, x4, x5, x6, x7, x8)
   array b = a[..2]
   array c = a[3..5]
   array d = a[6..]

On obtient trois tableaux avec ces contenus:
   b:   (x0, x1, x2)
   c:   (x3, x4, x5)
   d:   (x6, x7, x8)

On les affiche:
   b.display()
   c.display()
   d.display()

On doit voir:
   array (
    [0] => x0
    [1] => x1
    [2] => x2
   )
et ainsi de suite...

Чтобы заменить интервал другим списком, достаточно присвоить:
a [3.. 5] = массив («a», «b», «c»)
Содержимое становится:
(x0, x1, x2, «a», «b», «c», x6, x7, x8)

С таким же синтаксисом подлистинг заменяется списком или элементом:
a [3.. 5] = «xyz»
Оригинальный чайный список become :
(x0, x1, x2, «xyz», x6, x7, x8)

Для удаления подлиста объявляется nil, «не в списке» (не в списке):
a [3.. 5] = нил
Убрали подлист 3.. 5, который есть (x3, x4, x5), получаем:
(x0, x1, x2, x6, x7, x8)

Можно проверить, принадлежит ли значение подлисту.
Пример:

  array a = array("un, "deux", "trois")
  if "deux" in a[2..5] print "dedans"

Текст

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

Синтаксис:

  text s                 crée un texte.
  s = "str"              initialise.
  s = s[i]               prend un caractère.
  s[i] = s2              remplace un caractère, s2 a un seul caractère.
  s = s[i..j]            prend une sous-chaîne, de i jusqu'à j inclus.
  s[i..j] = s            remplace une sous-chaîne.
  s[i..j] = ""           supprime une sous-chaîne.

Литеративный текст - строка символов, запятнанная одиночными или двойными кавычками.
Символ + может использоваться с текстами, и он представляет собой конкатенацию двух строк.
Пример:

  text b = "préfixe"
  text a = b + "suffixe"

Содержание а будет: «приставка».

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

Retour   Méthode         Fonction

text     capitalize()    met la première lettre en majuscule.
int      compare(text)   compare lexicographiquement deux textes (ignore maj).
                         retourne -1, 0, 1.
text     dup(int)        retourne un texte dupliqué n fois. Ex: "*".dup(10).
void     fill(text, int) remplit avec le texte en argument dupliqué n fois.
int      find(text s2)   retourne la position du texte s2 dans le texte,
                         retourne "nil" si non trouvé.
                         (tester si = nil car <> nil ne va pas en PHP)
int      identical(text) compare, différencie maj/min. Retourne -1, 0, 1
void     insert(int, text) insère in text à la position donnée.
boolean  isNumber()      retourne true si le texte contient un nombre.
int      length()        retourne la longueur.
text     lower()         met en minuscules.
text     ltrim()         supprime blancs et codes de contrôle au début.
text     replace(ft, rt) remplace chaque occurence de ft par rt.
void     reserve(int)    alloue la taille donnée pour utiliser comme buffer.
array    split(sep)      découpe le texte en éléments séparés par sep.
int      toInt()         convertit en entier
natural  toNatural()     convertit en naturel.
real     toReal()        convertit en réel.
text     toText()        cast une chaîne littérale en text (pour C++).
text     trim()          supprime blancs et codes de contrôle en début et fin.
text     rtrim()         supprime blancs et codes de contrôle en fin.
text     upper()         met en majuscules.
text     wrap(int size)  mots non coupés.

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

Объявлены с типом: var.
Динамические переменные имеют методы всех других типов переменных, но не методы объявленных классов (см. exter). Когда переменная присваивается вару, для назначения содержимого типичной переменной требуется cast.

Методы вара :

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

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

  []   : indice, lecture ou modification de sous-liste.
  +    : fusion de deux séquences. Ou ajoute un élément à une liste.
  -    : supprime une séquence d'une autre, ou un élément d'une liste.
  =    : comparaison de deux séquences.
  in   : teste si un objet est dans une séquence.
  &    : intersection de deux listes (donne les éléments communs).
  |    : union sans doublons de deux listes.

Картина

В Script существуют два вида динамических списков:

 array:  (tableau) indicé par des nombres entiers.
 dict:    (dictionnaire) les clés sont des textes.

Массив - это индексированный динамический список объектов или литералов.

Пустая таблица представлена [].
Дословная таблица - это список выражений, разделенных запятой и вставленных между [].
Переменная может быть элементом массива.
Конструктор начинается с ключевого слова «array».

Чтобы показать содержимое таблицы a, мы вводим a.display () и получаем что-то из фигуры:

  array(
  0 : un
  1 : deux
  2 : trois
  )

Создать таблицу

Конструктор массива имеет форму: array (значение, значение и т. д.)
Число параметров варьируется от 0 до n. Записывается пустой инициализатор: array ()
Пишется литературная картина: {... Значения...} Можно определить массив, назначив конструктор, литеральный массив или уникальное значение.

Синтаксис:

  array a                               crée un tableau.
  array a = array()                     crée un tableau vide.
  array a = []                          crée un tableau vide.
  array a = array(x, y, ...)       crée et initialise un tableau.
  array a = {x, y, ...}                 crée et initialise un tableau.
  array a = array(8)            utilise le constructeur.
  array a = 3                           crée un tableau d'un élement.

Элементы массива могут быть любым выражением, за исключением логического выражения * * *. Если поместить истинное значение в массив PHP, каждый раз при использовании оператора «in» будет возвращаться истинное значение с любым искомым значением.

Таблица может быть объявлена без назначения содержимого и впоследствии заполнена:

  array a
  a.push("un")
  a.push("deux")
  a.push("trois")

Элементы встречаются по их положению в таблице.
Примеры:

  a[1] = "a"
  a[2] = "b"
  for x in a : print x
  ... doit afficher:  a b

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

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

  a[n]                   lit l'élément ayant le numéro n.
  a[n] = x               remplace l'élément à la position n.
  a[n] = nil             efface un élément.
  a = []                 efface le tableau entier.
  a[n].upper()          appel d'une méthode sur l'élément n du tableau.

Пустой индекс означает текущий элемент :

   a[]                        élément à la position courante.

Индекс может быть любым выражением, которое оценивается в целое число. Выражение не может содержать элемент массива.

  a[10 + x / 2]            valide.
  a[10 + b[5]]             n'est pas valide.

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

  array a = [ x, "two", 3 ]
  var x = a[1]                utilisation de var pour lire l'élément de type inconnu.
  text t = a[2]
  int i = a[3]

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

  a[1000] = "x"

En PHP et JavaScript:
 array(
  0 : un
  1 : deux
  2 : le dernier
  1000: x
 )

En C++:
 array(
  0 : un
  1 : deux
  2 : le dernier
  3: x
 )

В PHP индекс 1000 является только временным и изменится, как только инструкция изменит таблицу.
Инструкция в форме a [n] = x служит для изменения значения данного индекса, не следует присваивать таблицу таким образом, которая подходит только словарям (dict), как показано ниже.

Итератор

Содержимое таблицы может просматриваться итератором.
На первый элемент указывают методом begin (), или на последний с end (), текущий элемент получается пустым индексом фигуры [].

  begin()     pointe sur le premier élement et retourne sa valeur.
  end()       pointe sur le dernier élement et retourne sa valeur.
  inc()       déplace sur l'élément suivant.
               Retourne la valeur pointée avant, ou nil au-delà du dernier élément.
  dec()       déplace sur l'élément précédant. Retourne la valeur ou nil.
  index()     retourne l'index de l'élément pointé.
  value()     retourne la valeur de l'élément pointé.
  []          indice de l'élément courant.
  nil         signifie "not in liste" et est retourné par différentes fonctions
              quand aucune valeur ne peut être retournée.

Пример использования таблицы a :

  a.begin()                 ` déplace sur le premier élément
  while a[] <> nil          ` teste si la fin de liste est atteinte
    print a[]               ` affiche l'élément actuellement pointé
    a.inc()                 ` déplace sur l'élément suivant
  /while

В порядке убывания :

  a.end()
  while a[] <> nil
    print a[]
    a.dec()
  /while

Использовать массив в качестве стека

После создания таблицы можно применить различные функции списка или стека...

a.push("item")     ...ajoute un élément à la fin de la liste
a.unshift("item")  ...ajoute un élément au début de la liste
a.pop()            ...lit et enlève le dernier élement
a.shift()          ...lit et enlève le premier élement

Таким образом, можно читать и удалять элементы таблицы с помощью следующих инструкций:
print a.shift ()

Интервал в таблице

Интервал ограничен интервалом позиций.

a[pos..fin]           la rangée entre "pos" et "fin" inclus.
a[..fin]              du début jusqu'à la position "fin".
a[pos..]              de la position "pos" à la fin du tableau.
a[..]                 prend le tableau entier (peu utile).
a[pos..fin] = nil     supprime une rangée d'éléments.
a[pos..fin] = b     remplace une rangée par un tableau/élément (id).

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

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

Пример:

array a = array("un", "deux")
array b
b = a + array("trois", "quatre")    maintenant le contenu de b est de quatre éléments.
a = b - array("un", "quatre")       maintenant le contenu de a est: ("deux", "trois").

На массивах можно использовать только арифметические операторы + и - с оператором принадлежности «in».

Оператор «в»

Этот оператор может использоваться для проверки того, содержится ли значение в списке (массив, диктант или даже текст), а также для просмотра содержимого.

Синтаксис и примеры:

if variable in array
for variable in array

if x in a :   print "dedans";  /if
if x in array(1,2,3) : print "dedans"; /if
for x in a print x
for t in array("un", "deux", "trois")  print t

Двоичные операторы динамических списков

В динамических списках (array или dict) можно использовать двоичные операторы перекрестка и объединения. Пересечение двух списков возвращает только те элементы, которые одновременно входят в оба списка. Объединение двух списков - это новый список, состоящий из элементов первого, плюс те из второго за вычетом тех, кто уже входит в первый.

&  intersection
|  union
^  complément d'intersection

a = array(1, 2, 3, 4) & array(3, 4, 5, 6)   fait que a contient (3, 4)..
a = array(1, 2, 3, 4) | array(3, 4, 5, 6)   fait que a contient (1, 2, 3, 4, 5, 6).

Применение функции к массиву

Метод map, реализованный в JavaScript и PHP, позволяет последовательно применять функцию к каждому элементу массива и, возможно, возвращать новый массив. Пример:

int mapfun(int x) return x * 25

b = [1,2,3,4,5]
print b.map(mapfun)

Если ты хочешь применить функцию сразу к нескольким массивам, или к диктантам, ты используешь индекс. Пример :

for text k, var v in d1
  d1[k] + d2[k]
/for  

Для каждого элемента добавляется содержимое ассоциативного массива d2-d1.

Используя функцию, имеет два параметра:

array d1 = [1,2,3,4,5]
array d2 = [10, 20, 30, 40, 50]
int mapfun(int x, int y) return x + y
for int i, var x in b print mapfun(d1[i], d2[i])

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

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

  nomarray[i] = array()
  nomarray[i][j] = x
  ou
  nomarray[i] = array(x)

Невозможно создать элемент непосредственно в несуществующем подчиненном массиве. Индексы i и j предполагают, что уже существуют i и j элементы.

Сравнение двух таблиц

Язык может проводить сравнения между массивами чисел со всеми реляционными операторами. Рассматриваются две таблицы разных размеров.

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

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

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

  array a = []
  array ()

  a.push("un")
  array
  (
   [0]=> un
  )

  a + array("deux", "trois", "quatre")
  array
  (
   [0]=> un
   [1]=> deux
   [2]=> trois
   [3]=> quatre
  )

  a.shift()       ... le premier élément est supprimé et les clés sont renumérotées.
  array
  (
   [0]=> deux
   [1]=> trois
   [2]=> quatre
  )

  a[1000] = "mille"
  array
  (
   [0]=> deux
   [1]=> trois
   [2]=> quatre
   [1000]=> mille
  )

  a.unshift("x")       ... toutes les clés sont renumérotées, même la clé 1000.
  array
  (
   [0]=> x
   [1]=> deux
   [2]=> trois
   [3]=> quatre
   [4]=> mille
  )

 Créons deux nouveaux tableaux:
  array a = array("un","deux")
  array b = array()
  b[1000] = "mille"
  a + b
  Les clés sont renumérotées.
  array
  (
   [0]=> un
   [1]=> deux
   [2]=> mille
  )

Если заменить a + b на a.push («тысяча»), результат будет таким же.

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

Итераторы еще не реализованы компилятором JavaScript, также не распознаются методы begin, dec и т. Д.

Retour  Nom               Action

var     begin()           pointe sur le premier élément.
var     dec()             retourne un élément et décrémente le pointeur.
void    display()         affiche le tableau.
var     end()             pointe sur le dernier élément.
boolean empty()           return true si le tableau est vide.
int     find(var)         recherche un élément, retourne l'index ou nil.
int     findLast(var)     recherche un élément à partir de la fin.
var     inc()             retourne un élément et incrémente le pointeur.
int     index()           retourne l'index de l'élément pointé.
void    insert(int, var)  insère un élément à un index entier (pas un text).
text    join(text sep)    convertit en text avec le séparateur donné.
text    key()             retourne la clé de l'élément pointé.
boolean load(text nom)    charge un fichier dans un tableau ("file" de PHP).
var     min()             retourne la valeur la plus faible.
var     max()             retourne la plus forte valeur.
array map(fonction) applique une fonction à chaque élément et retourne un nouveau tableau. void pack() rend les éléments du tableau consécutifs. var pop() lit et supprime le dernier élément. var pop(int) lit et supprime l'élément à la position donnée. void push(val) ajoute un élément à la fin. var rand() retourne un élément à une position aléatoire. array reverse() retourne la liste en ordre inversé. var shift() lit et supprime le premier élément. int size() retourne le nombre d'éléments. void sort(int) trie les valeurs en ordre ascendant. void rsort(int) trie les valeurs en ordre descendant. void store(text nom) sauve le tableau dans un fichier. Ajouter false en argument pour ne pas ajouter de code eol. number sum() calcule la somme des éléments. text toText([text]) convertit le tableau en chaîne avec code de séparation en option. array unique() retourne le tableau sans valeur en double, la première est gardée. void unshift(var) insère un élément en première position.

Метод выходит из массива имеет необязательный аргумент: 0 для буквенно-цифровой классификации (по умолчанию в JavaScript и PHP), 1 для цифровой классификации.

Словарь

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

clé:valeur

Пустой диктант представлен как {}. Литеральный диктант - это список пар, разделённых запятой, и загибающихся между {}.

Вместо таблицы диктант создается повестками:

d[k] = "b"
d["un"] = "element 1"

Даже если JavaScript поддерживает цифровые ключи, заключенные в кавычки, поэтому рассматриваемые как тексты, это приводит к непредсказуемым результатам при смешивании их с буквенными ключами. Так что нужно избегать смешения парней.

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

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

Синтаксис:

dict d                                 // crée un dict.
dict d = {x:v, y:w,...}                // crée et initialise un dict.
dict d = {}                            // crée un dict vide.

Значения могут быть любого типа объекта.
Ключ может быть переменной, а значение - выражением.

Пример:

text k = "a"
text v = "b"
dict d = {k : v}
dict d = {k : v + "x".dup(4) + 20.toText()}

Этот пример записывает в dict d «bвсе 20» с ключом «a».

Индексировать диктант

Значения в диктанте доступны текстовым ключом.

Синтаксис:

  d["clé"]              prend le premier élément avec la clé "clé".
  d[clé] = valeur       remplace une valeur ou ajoute un couple
                        clé-valeur si la clé n'est pas déja dans le dict.
  d[clé] = nil          supprime un élément.
  d = {}                efface le dict.

Exemple:

  dict d
  d["program"] = "ce que l'on veut accélerer"
  print d["program"]                   affiche le texte ci-dessus.

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

Обычный способ использования словаря - с помощью ключей или итераторов. В некоторых случаях может пригодиться прямой доступ к интервалу значений.
- При добавлении элемента или другого диктанта к диктату, с помощью интервалов, push, unshift, PHP генерирует новый ключ для этого элемента. Новый ключ - это число.
- Если заменить интервал другим диктантом, некоторые элементы могут быть потеряны. Это происходит и при слиянии.
- Ключи диктанта, заменяющего интервал, не сохраняются.

Просмотры отображения:
Он должен представить все ключи и ценности в диктанте.

  dict d = {"a":"alia", "b":"beatrix", "c":"claudia"}  

  d.display()                     

  for k,v in d : print k, v; /for                      for

Методы диктанта

Retour  Nom               Action

void    display([flat])   affiche le dict indenté. Si l'argument est false, il n'est pas indenté.
boolean empty()           retourne true si le tableau est vide.
int     hasKey(text)      retourne true si la clé existe.
int     find(var)         recherche un élément, retourne l'index ou nil.
dict    getById(text)     retourne un dictionnaire assigné à la propriété en paramètre.
array   getByName(text)   retourne la liste des éléments dont l'attribut name a l'argument pour valeur.
array   getByTag(text)    retourne la liste des objets donc l'attribut tag à l'argument pour valeur.
array   keys()            retourne la liste des clés.
void    kSort()           réordonne les index en préservant les associations.
void    load(text nom, [xml])    charge un fichier dans le dict. 
var     pop()             lit et supprime le dernier élément.
var     shift()           lit et supprime le premier élément.
int     size()            retourne le nombre d'éléments.
void    sort(int, bool)   trie les valeurs en ordre ascendant.
void    store(text nom)   sauve le dict dans un fichier.
text    toXML()           convertit le dict en fichier XML dans une chaîne.
void    unshift(text,var) insère une paire clé valeur première position.
array   values()          retourne la liste des valeurs.

Метод загрузки: Файл преобразуется из XML в dict, если имеет расширение xml, rss, svg или если дополнительный аргумент равен 1.

Числовые таблицы

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

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

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

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

Exemple:

  int(1, 2, 3)

Количество элементов от 0 до n.

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

  int(1)
  real(10r)

Это не проблема при назначении, так как из скалярного массива можно создать одноэлементный массив.

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

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

  int[] i = int(x, y, ....)

После объявления он используется как смешанный массив, но в него можно добавить только целые числа.
При создании можно назначить конструктора или литерала.
Одноэлементный конструктор эквивалентен конструктору целого числа. В одном выражении придется использовать литерал.

Примеры:

  int[] x = int(5)
  int[] x = int(1,2)
  int[] x = y + int{5}

Таблица реального, натурального, номера

Заявления:

  real[] r    = real(1.0, 2.0, etc...)
  natural[] n = natural(1, 2, etc...)
  number[] n  = number(1, 2.0, ...)

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

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

  int[] i = int(...)
  array a = i

Но создать смешанную картину с типичным конструктором можно только:

Примеры:

    [1,2,3]           ... c'est un tableau mixte, avec des éléments entiers
    int[] i = [1,2,3]     ... NON VALIDE, il faut plutôt écrire:
    int[] i = int(1,2,3)  ... valide.

Примеры :

  array a = int(1,2)          ... NON valide
  array a = array(int(1,2))   ... NON valide

Типичная таблица и var

К вару можно назначить типичную таблицу.

  int[] i = int(1,2)
  var d = var(i)

Для использования этого вара предусмотрены два метода:
arrayType () возвращает тип массива, содержащийся в var.
toList (int = 0) возвращает типичный массив содержимого.
Параметр является типом и требуется, когда var содержит смешанную таблицу, которую необходимо преобразовать в типичную таблицу.

Признанные типы:

  $TYPE_INT        tableau d'entiers
  $TYPE_REAL
  $TYPE_NATURAL
  $TYPE_NUMBER

Пример:

  d = var(int(1,2))
  if d.arrayType()
  = $TYPE_INT:
     int[] i = d.toList()
  = $TYPE_REAL:
     real[] r = d.toList()
  /if

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

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

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

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

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

 for int k in 0 .. 10 let i.push(0)

Теперь можно поместить элемент в позицию 10.

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

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

  i[10].toText()    .. non valide
  int x = i[10]
  x.toText()         .. valide

- Функция PHP «array_diff» не работает, когда массив содержит объекты, поэтому вычитать такие массивы невозможно.

Ряд

Файл является виртуальным объектом для обработки локальных или удаленных файлов.
Полное объяснение файловой системы см. в разделе «fopen» в руководстве C или PHP.
Объект очереди создается путем объявления экземпляра типа очереди. Файл на диске создается командой open. Она обеспечивает доступ к файлу в различных режимах, в зависимости от второго параметра метода.
Управляющая структура error позволяет проверить, был ли файл открыт правильно или нет.

Синтаксис для создания или открытия файла:

  file nomfic                 declare un file.
  nomfic.open(path, mode)     ouvre un fichier selon un chemin et un mode.

Types de chemins:
  http://path                    fichier distant http.
  ftp://path                      fichier distant ftp.
  path                             fichier local.

Modes:
  "r"            lecture seulement, à partir du début.
  "w"            écriture  seulement à partir du début.
  "r+"           lecture ou écriture au début du fichier.
  "a"            ajout en fin de fichier en écriture seule.
  "a+"           lecture à la position courante, ou écriture à la fin.

Методы файла:

retour     méthode                  action

int        eof()                    retourne true quand la fin de fichier est atteinte.
int        open(text, text)         crée ou ouvre un fichier. Positionne le drapeau "error".
int        close()                  ferme le fichier.
text       read(int)                lit un bloc selon la taille en argument, retourne un text.
text       readLine()               lit et retourne la ligne suivante dans un fichier de texte.
int        seek(int)                va à la position donnée en argument, retourne 1 si ok.
int        size()                    retourne la taille du fichier.
int        time()                   retourne la date de dernière modification.
int        write(text)              écrit le texte donné en argument, retourne la taille écrite.
void       writeLine(text)         écrit le texte en argument.

Примеры:

file nomfic                       crée un objet file.
nomfic.open("monfichier", "r")        ouvre un fichier physique.
nomfic.close()                    ferme le file.
boolean b = nomfic.eof()         assigne vrai à b si la fin de fichier est atteint.
nomfic.seek(250)                 lecture ou écriture en sautant 250 octets.

Удаленные файлы в данный момент не управляются Скриптолом C и интерпретатором.

Чтение

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

Примеры:

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

Write

Метод write помещает содержимое текстовой переменной в файл. После открытия файла в режиме «w» или «a» и сохранения либо с нуля, либо в конце текущего содержимого каждый новый вызов write добавляет новый текст к концу.

Простой пример:

text nomfic = "monfic"                 // nom du fichier
file sortie                                  // nom de l'objet virtuel
sortie.open(nomfic, "w")               // ouvert en écriture
error? die("impossible d'ouvrir " + nomfic)
for text ligne in maliste              // un tableau quelconque
   sortie.write(ligne)                  // enregistrer un élément
/for
sortie.close()                         // fermer le fichier

XML

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

Текстовое содержимое тега связано с ключом данных в генерируемой ассоциативной таблице.

Пример:

<xml id="car" speed=150 name="Spitfire">
<engine id="engine1" power=100 />
<passengers id="pass1" num=4 >
"Clara, Dana, Elisa, Farah"
</passengers>
</xml>

Этот код JavaScript генерируется компилятором:

var car={
  "_00" : "car",
  "tag" : "xml",
  "speed":150,
  "name":"Spitfire",
  "engine1":{
    "tag": "engine",
    "power":100
  },
  "pass1":{
    "tag": "passengers",
    "num":4,
    "data":"Clara, Dana, Elisa, Farah"
  }
};

Или этот PHP-код:

$car=[
  "speed"=>150,
  "name"=>"Spitfire",
"engine"=>[ "power"=>100 ],
"passengers"=>[ "num"=>4,
"data"=>"Clara, Dana, Elisa, Farah" ] ];

Ассоциативная таблица также может быть преобразована в XML-документ в текстовой переменной, которую можно сохранить в файле:

car.toXML().store("fichier.xml")

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

После открытой инструкции конструктор error .../error должен выполняться в случае ошибки доступа. Но интерпретатор может остановить программу до достижения конструкции. В противном случае содержимое блока будет выполняться в случае ошибки .

Синтаксис:

xxx.open("nom fichier")
error
      ...instructions...
/error
ou:
  xxx.open("nom fichier"); error ? action
ou:
  xxx.open("nom fichier"); error action

Пример :

file monfic
monfic.open("nom", "r")
error? exit()

Если файл не найден или его нельзя открыть, программа останавливается.

Области

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

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

Видимость переменной - это уровень, на котором она объявляется: Глобальный, класс, функция или ограниченный блок (if, do, for и т.д.), а также уровни содержимого.

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

Заголовок конструкции для является частью области блока.

for text t in a                 // t est visible seulement dans la boucle for.
   t = a.inc()
/for

Часть let, завершающая петлю while, находится в области петли.
Аргументы функции находятся в области функции.
Внутри функции, если переменная ссылается перед назначением, она ссылается на глобальную переменную, если она существует, в противном случае это ошибка.
В методе класса, если он упоминается перед назначением, он ссылается на атрибут, если он существует, в противном случае это ошибка.
Глобальные переменные не видны в классе, кроме внешних переменных.

Внешние переменные (из PHP, Apache и т. д.) всегда находятся в зоне, так как над ними нет контроля. Поэтому ты должен знать их имя, чтобы не использовать его повторно, так как переменные Script превращаются в PHP-переменную с $ впереди.
При использовании внешних переменных в функции их нужно объявить «глобальными», так как компилятор ими не управляет.

Внешние переменные, константы и функции

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

Переменные и константы PHP могут использоваться в качестве переменных и констант Script при объявлении с ключевым словом «exter».
Внешние объявления, как и включенные, размещаются в заголовке файла.

Синтаксис для внешней переменной:

  extern type identifieur
  extern const type identifieur

Никаких контрольных проверок типа или области внешнего объекта. В функции требуется «глобальное» заявление.

Пример:

  global argv
  array a = $argv

Константа PHP объявляется как переменная с ключевым словом const:

   extern const text PHP_VERSION
    ...
   print PHP_VERSION

Также можно использовать переменную PHP или C++ без объявления с приставкой $, за которой следует идентификатор.
Он может начинаться с подчеркивания.

  $var_name
  $(constant_name)                          in PHP
  $constant_name.                           in C++

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

Функции PHP могут использоваться без объявления, чего не происходит с функциями C++.
Их также можно объявить ключевым словом exter. Значение по умолчанию определяется назначением. Это значение используется в C++, оно игнорируется PHP.

Синтаксис и пример:

  extern type identifieur(... arguments...)
  extern text substr(text, int, int = 0)

Внешний класс

Чтобы использовать методы классов PHP или C++, необходимо объявить эти классы и элементы, которые ты хочешь использовать.

Пример :

extern
  class phpClass
     int phpAttribute
     void phpMethod(int argument)
     ... déclaration ...
  /class
/extern

Внешние типы

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

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

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

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

Класс

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

  x = objet.attribut
  objet.methode()

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

Описание класса начинается с ключевого слова «class» и заканчивается на «/class ».

Атрибуты (переменные) должны быть размещены перед элементами. Класс открывает пространство видимости. Глобальные переменные и определенные функции не видны внутри класса. Атрибуты и методы класса или экземпляра другого класса видны во всех методах класса с именем экземпляра в префиксе.

Пример объявления класса:

class voiture
     ...membres...
  /class

Пример класса с атрибутами и методами:

class voiture
      int lavitesse = 50
      int passagers = 4

      void voiture.vitesse(int i)
          int x = lavitesse * 2
      return x
  /class

Пример экземпляра со ссылкой на методы:

voiture mavoiture
print mavoiture.passagers
print mavoiture.vitesse()

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

Конструктор - это метод с именем класса, который вызывается при создании экземпляра класса.
У него всегда есть тип возвращения «void», что означает: ничего.

Пример конструктора:

  class Voiture
      int vitesse

      void Voiture(int p)          // cette méthode est un constructeur
         vitesse = 0               //vitesse est initialisée lors de la déclaration d'une instance
      return
  /class

Синтаксис для создания экземпляра:
Nomclasse nomstance = Nomclasse (аргумент [, аргументы])
или:
Именной класс для конструктора без аргументов

Пример:

  Voiture mavoiture = Voiture(60)               ... crée une voiture avec une vitesse de 60
  Camion moncamion                      ... equivalent à ci-dessous
  Camion moncamion = Camion()

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

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

Пример:

  node, ext = Dir.splitExt(chemin)

Атрибуты также могут быть статическими. Статический атрибут является общим для всех наследуемых экземпляров. Статический метод не может ссылаться на атрибуты, поскольку они существуют только в экземплярах класса, если они также не являются статическими.
Другой метод не может быть вызван в теле статического метода.
Ключевое слово «static» должно предшествовать типу объекта.
Сообщение об ошибке выдается, когда статическая функция использует нестатический атрибут или вызывает другой метод.

Пример статических атрибутов и методов:

  class Voiture
    static usine = "Xxx"
    static void denomme(text x)
      usine = x
    return
  /class

  Voiture.denomme("nom")
  Voiture.usine = "nom"

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

  Voiture maVoiture
  maVoiture.denomme("nom")
  maVoiture.usine = "nom"

Эффект будет таким же.

Наследство

Класс может наследовать атрибуты и методы другого класса, если он объявлен подклассом другого класса.
Класс «имя» наследует атрибуты и методы «австрином». Это также работает со статическими атрибутами и методами.

Синтаксис объявления наследования:

  class nom is autrenom

Пример:

  class Vehicule
    int fuel
    void Vehicule()
     fuel = 100
    return
  /class

  class Voiture is Vehicule
    int passagers
    void Voiture()
       passagers = 3
       fuel = 50
    return
  /class

  class Camion is Vehicule
    int charge
    void Camion()
      fuel = 200
      charge = 1000
     return
 /class

  Camion bibendum
  Voiture daisy
  print bibendum.charge         attribut de la classe Camion
  print bibendum.fuel             attribut de la superclasse Vehicule
  print bibendum.passagers     mauvais! passagers non accessible à Camion!
  print daisy.passagers          bon, passagers est attribut de Voiture

Перегрузка

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

Пример:

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

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

Включено

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

include "nomfichier.sol"

Скобки необязательны. Необходимы одинарные или двойные кавычки. Если ты хочешь напрямую использовать PHP-файл, а компилятор его не обрабатывает, используй расширение PHP.
Только файлы с расширением «.sol» будут обрабатываться компиляторами, если оно другое:

Примеры:

include "exemple.php"
include "exemple.js

Файл PHP будет игнорирован кодом JavaScript и файл JS будет игнорирован кодом PHP.

При вставке кода скриптола на HTML-страницу содержимое включенного файла должно размещаться внутри тегов <script> и </script>, даже если файл содержит только код скриптола. Код, созданный для HTML-страницы, может быть другим.

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

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

1) определить функцию:
Пример:

  int compare(int a, int b)
    boolean b = (a < b)
  return b

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

  void mafonc(function a, int x, int y)
    print a(x,y)
  return

3) использовать родовую функцию:
Аргумент может быть исходной функцией или другой функцией с теми же аргументами и типами возврата.

  mafonc(compare, 10, 8)

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

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

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

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

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

Книжные магазины 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 ).

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

Эти функции являются общими для PHP, C, C++ и Script. Если имя PHP отличается, оно указывается в списке.

Полный список - в файле fun.hpp.

void die(text message)       Affiche un message en quittant le programme.
void exit()                  Quitte le programme. Peut afficher un message.
number min(number, number)   Retourne le plus petit de deux scalaires.
number max(number, number)   Retourne le plus grand de deux scalaires.
const cstring plural(int x)  Retourne le pluriel "s" si le nombre x > 0.
array range(int x, int y)    Génère un tableau des entiers compris entre x et y.
cstring str(number)          Convertit un nombre en chaîne de charactères.
void swap(var, var)          Echange le contenu de deux variables.
text pad(text t, len l , text c  [, int o]])
  Complète un texte avec des espaces ou la chaîne de caractères donnée.
  t: text à compléter.     l: longueur à atteindre.
  c: texte à ajouter, des espaces par défaut.
  o: option STR_PAD_LEFT, STR_PAD_BOTH, par défaut à droite. (Voir: str_pad)

Актерский состав

text chr(integer)              Retourne le charactère pour une valeur ASCII.
                               Ex: chr(32) retourne un espace blanc.
int ord(text)                  Retourne la valeur ASCII d'un charactère.
int intval(any)
int doubleval(any)
natural naturalval(any) 
text strval(any)               Convertit un nombre en text. 
char *str(any)                 Convertit un nombre en chaîne de charactères C. 
boolean boolval(int) 

Функции файлов (см. также методы типа File):

void exec(text)               Passe une commande au système d'exploitation.
boolean file_exists(text)     Teste si le fichier dont le nom est en argument existe.
number filesize(text)         Retourne la taille.
number filetime(text)         Retourne la taille (utiliser la fonction date pour afficher).
text filetype(text)           Retourne "dir" ou "file".
boolean rename(text, text)    Renomme un fichier. Retourne faux en cas d'échec.
void system(text commande)    Passe une commande au système d'exploitation.
boolean unlink(text)          Efface un fichier. Retourne true si effacé.
var require(text)             Déclare un module externe (JavaScript seulement).

Функции каталогов:

boolean chdir(text)          Change le répertoire courant. Retourne false si échec.
boolean mkdir(text)          Crée un sous-répertoire. Retourne true si créé.
boolean rmdir(text)          Efface un sous-répertoire. Retourne true si éffacé.
text getcwd()                Retourne le chemin répertoire courant.

Математические функции:

number  abs(number)          Retourne la valeur absolue d'un nombre.
real       acos(real)
real        asin(real)
real       atan(real)
number  ceil(number)         Retourne le nombre arrondi à l'entier supérieur.
real       cos(real)
real       exp(real)
number  floor(number)        Retourne le nombre arrondit à l'entier inférieur.
number  fmod(number, number) Return le modulo de deux nombres.
real       log(real)
number  pow(number, number)  Retourne la puissance n d'un nombre.
int        rand()            Retourne un nombre aléatoire.
void      randomize()        Démarre une séquence de nombres aléatoires.
real       round(real)       Arrondi au plus proche, plancher ou plafond.
real       sin(real)
number  sqrt(number)         Retourne la racine d'un nombre.
real       tan(real)

Функции времени:

int         time()           Temps en millisecondes depuis le 1 Janvier 1970.
dict       localtime()       Temps et date courant lors de l'appel, dans un dictionaire, voir ci-dessous.

Ключ диктанта, возвращаемый локалтаймом:

tm_sec                  Secondes après la minute  [0,61]
tm_min                  Minutes après l'heure    [0,59]
tm_hour                 Heures après minuit      [0,23]
tm_mday                 Jour du mois          [1,31]
tm_mon                  Mois à partir de Janvier      [0,11]

tm_year                 Année depuis 1900
tm_wday                 Jour à partir de Dimanche         [0,6]
tm_yday                 Jour depuis le 1 Janvier     [0,365]
tm_isdst                Indicateur d'heure d'hivers

Управление исключениями

Обработка исключений требует внешнего определения. Синтаксис:

  extern
     class exception
       string what()
     /class
  /extern

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

Приложение: ключевые слова

Слова могут быть зарезервированы для целевого языка, но не являются частью Script.

псевдоним always и array был асинхронным
bool boolean break byte
поле catch char clar const продолжается
dict do do
echo else enum ошибка исключение
false file finally float for forever from function
общий
if импорт in include int integer is
let long
мод
nan natural new nil не нулевой номер
итак,
print private protected public
react real return
скрипт script sol static step super switch
text this to true try
undefined until
var void
while
yield
ноль


© 2001-2017 Денис Суро.