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

править

Scriptol файл

править

Scriptol файл должен иметь ".sol" расширение и могут быть конвертированы в новый файл с любым ". PHP" или ".cpp" и ".hpp" расширениt или двоичный файл с расширением ".exe" расширение под Windows и без расширения под Unix.

Сценариями могут быть различные скрипты или приложения (или динамические веб-страницы).

Сценарий предстваляет перечень заявлений, наряду с определениями функций и классов... Сценарий является исходником с выражениями на глобальном уровне, он не может выполняется с "main" функции, потому что для компиляторов, весь скрипт сам по себе является "main" функцией.

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

  int main()
     ... statements ...
  return 0
  main()             ...starting the program

Интерпретация программы Scriptol

править

Команда:
si [опции] исходный файл

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

Опции интерпретатора:

none: интерпретировать и выполнить исходный файл.
-t: test, только проверить, не исполняя код.
-v: verbose, отображение подробной информации.
-q: quiet, не выводить сообщений во время выполнения.
-f: force, игнорировать ошибки и запустить программу.

Компиляция программы Scriptol в PHP

править

Под Windows, команда:
solp [Опции] исходный файл

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

Под Linux, команда для компиляции: solp [опции] имя файла и команды для запуска PHP код: php -q sourcefile.php

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

none: запустить Scriptol-файл, скомпилировать его при необходимости.
-w: компиляциz кода, встроенного в HTML-страницу и перевод в PHP-файл.
-r: компиляция при необходимости и проверка интерпретатором.
-b: перекомпилировать файл и все include'ы. Не интерпретировать.
-t: проверка кода до компиляции.
-v: отображать больше сообщений при запуске программы.
-q: не отображать сообщение после компиляции.
-4: Компиляция с синтаксисом PHP 4 (классы PHP 5, не поддерживаются). 

Эти опции могут быть объединены в один вариант. Пример:-be эквивалентно -b -e

Компиляция программы Scriptol в исполняемый файл

править

Команда:
solc [опции] mainfile

Основной файл является тот, который имеет main() функцию. Зависимость рассчитываются компилятор, который знает, что компилировать или нет.

Опции Scriptol-C++ компилятора:

none: компиляции только то, что должны быть скоспилировано.
-b построить все объектные файлы.
-c скомпиляция всех исходников только в C++.
-e сделать исполняемый файл.
-r запустить исполняемый файл.
-t проверка перед компиляцией.
-v более сообщениях.
-q убрать сообщения.

Scriptol проект

править

Нет файл проекта, необходимых для создания всего приложения Scriptol. Так же, как в Java или PHP, вы можете скомпилировать весь проект только путем компиляции основного исходного файла. Scriptol скрипты должны включать "include" для каждого файла, содержание которого он использует. Компилятор вычисляет связи между всеми уровнями вложения и решает вопрос их перекрещивания в том числе.

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

править

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

Scriptol может быть определен как:

  • объектно-ориентированный.
  • XML-ориентированный (XML-документ может быть структурой данных в скрипте).
  • универсальные: использовать для написания сценариев, динамических веб-страниц, создание исполняемых файлов.
  • естественный: типы переменных пришел из науки, а не оборудования: number, text, real ...
  • XML-подобный стиль синтаксиса.
  • новые и мощные структуры управления.
  • список обработки массивов и словарей.
  • PHP, C++ и Java совместимы.

Это чистый язык благодаря:

  • простому синтаксису.
  • выражения закончиваются концом строки.
  • a same operator for ranges, slices, splices... -один и тотже оператор для диапазонов, slice, splice ...
  • похожий синтаксис для всех структур.

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

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

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

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

Числа:

  • целое - 32 бита. (Как "int" в C).
  • натуральное - 64-битные без знака.
  • вещественное - 64-битные числа с плавающей точкой. ("double" в С).

Тип:

  • типы с использованием методов.

Сборщик мусора:

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

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

  • примитивы являются объектами и имеют методы.
  • Литералы являются объектами и имеют методы.
  • единичное наследовани.
  • перегрузка методов (только в Scriptol C++ на данный момент).
  • конструкторы. Нет деструкторов.

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

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

Чистый синтаксис

править

C++ синтаксис:

for(int x = 0; x < 10; x++)
{
 printf("%d\n", x);
}

Scriptol синтаксис:

for int x in 0 .. 9 print x

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

Универсальные операторы

править

Некоторые языки программирования используюь один и тот же оператор для несвязанных вещей. Например, Язык программирования С использует оператор "*" и для "deferencing" и "multiply". Язык программирования С используются "&" и как "address-of" и как "binary and".

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

Например, оператор диапазона ".." используется:
* как в диапазоне "for" цикла.
* как интервал массива или словаря.
* В качестве диапазона в выражение:
if x in 0 .. 9 
  print "x inside range"
/if

Типы данных

править

В 1970-х годах, С и Паскаль изобрели типы, которые были связаны с аппаратнами ограничениями: char, long, short, char *, float и т.д...

Scriptol использует типы, связанные с реальными объектами мира text, number, integer, natural, real, array, dict, dir и т.д...

Выражение

править

Выражение заканчивается точкой с запятой или концом строки.

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

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

Комментарий

править

Комментарии предназначенного только для чтения и пропускается интерпретатором.

Одна строка комментария начинается с символа «`», текст пропускается до конца строки. «``» делает комментарий стойким в сгенерированном коде, когда скрипт Scriptol компилируется в другой язык, такой как C++ или PHP.

  ` это строка комментария
  print x        ` это комментарий в конце строки
  `` это стойкий комментарий

Комментарий «//» с языка С++ также признается строкой комментария.

Несколько линий комментария начинается с «/*» и заканчивается «*/». В прилагаемом примере текст пропускается.

Пример:

  /*
    Внутри этих маркеров, компилятором игнорируется содержимое
  */

Читабельность

править

Сложные и нечитаемые части C + + кода...

int x[] = { 1, 2, 3, 4 };
int i;
for(i = 0; i < 4; i++)
{
  if(x[i] == test) std::cout << test << " found" << std::endl;
}

могут быть заменены одним и ясным Scriptol выражением.

if test in { 1, 2, 3, 4 } print test, "found"

Символы

править

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

  • "+" "-" "*" "/" арифметические операторы которые Вы знаете.
  • "=" оператор присваивания.
  • "<" меньше.
  • ">" больше.
  • "<=" меньше или равно.
  • ">=" больше или равно.
  • ":=" условное присвоение.
  • ";" это завешение выражения.
  • "," это сепаратор. Он отделяет элементы инициализации или кортеж.
  • ":" строит ассоциации. Придает телу заголовока, значение ключа, метода объекта, и тому подобное ...
  • "." используются ассоциации. Связывает вызов метода объекта.
  • ".." отделяет предел интервала из двух чисел.
  • "--" также сивол интервала, верхний предел не включены.
  • "()" группы подвыражения или аргументов функции.
  • "[]" обозначает индекс или интервал.
  • "?" завершает условие в однострочных управляющих структурах.
  • "<>" не равно
  • "&" бинарных «И» или пересечение массивов.
  • "|" бинарный «ИЛИ» или объединение массивов.
  • "<<" сдвиг влево.
  • ">>" сдвиг вправо.
  • "and" логическое "И" (для булевых значений).
  • "or" логическое "ИЛИ".
  • "not" логическое отрицание.
  • "mod" по модулю ("%" с C++ не использыется).
  • "~~" охватывает код для вставки непосредственно в целевой язык.

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

править

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

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

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

править

Scriptol сценарий это просто текстовый файл с командами внутри, по одному на строку.
Примеры:

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

Текстовым редактором, включенных в архив установочного пакета, или любым другим текстовым редактора, введите:

  print "Hello world"

Сохраните его в файл hello.sol.

Выберите команду "interpreter" или "interpret" в меню "Tools", "Hello world" будет отображено.

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

  si hello или
  solp hello

Вы также можете построить и запустить исполняемый файл командами:

   solc -bre hello                построить hello.exe или hello под Unix
   hello                          запустить hello.exe или hello

Вы можете работать как с редактором так и с командной строкой Windows.

Внедрение кода Scriptol в HTML страницу

править

Для внедрения Scriptol кода в HTML-документ, он должен быть обрамлен в следующие теги:

   <?sol
       ...код...
   ?>

Если вы используете HTML редактор, который не признает эти маркеры, используйте вместо них:

  <script language="scriptol">
      ...код...
  </script>

Возможные варианты: 'scriptol', "scriptol" или scriptol.

Внутри этих маркеров, последняя строка сценария должна заканчиваться точкой с запятой или конецом строки (до символа ?>).

Простейший способ использовать сценарий Scriptol является вызов его из страниц PHP, который содержит include заявление: Пример:

  <?php
     include_once("count.php");
     update("manual.dat");
  ?>

Этот пример вызывает счетчик PHP в count.php, построенный из count.sol файла с помощью команды: sol -w count.sol

Тестирование HTML страниц

Если у вас установлен сервер Apache или Xitami или Windows Server на компьютере, и настроен PHP расширения, ваш код будет обрабатываться по Сети, один раз, как составленый на PHP. Otherwise you have to redirect the output of the script into a html file, "test.html" for example, with two commands that produce mypage.php, and execute the PHP code: В противном случае вы должны перенаправить вывод скрипта в HTML-файл, "test.html", например двумя командами, которые создают mypage.php, и выполняют код PHP:

solp -w mypage php mypage.php > test.html

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

править

Для условного процесса, оператор "if", за которым следует логическое выражение, список операторов для выполнения или не следует, в зависимости от состояния, и "/if" ключевое слово.

If x = 5
  print "equal"
/if

Внедрение альтернативны "else": если условие ложно, еще один список выражений может быть обработаны.

If x = 5
  print "equal"
else
  print "not equal"
/if

Однострочная структура

править

Когда тело структуры является лишь одним выражением, синтаксис может быть сокращен до одной строки.

If x = 5 print x

Если выражение не является командой, такой как "print", "break", "continue" и т.д..., ключевое слово "let" не требуется.

If x = 5 let y + 1

Компзитный If

править

Cтруктура может быть изменена в более мощные конструкции, которая является объединением "if" и "switch case", даже более продвинутый, чем в С, так как вы можете проверить любой тип переменной.

if x 
  = 5: print "equal"
  > 5: print "more"
else 
  print "less"
/if

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

править

Стандартный синтаксис присваивает переменной с элементами в диапазоне в Scriptol пишется с двойной точкой между двумя значениями (или переменными).

for int x in 0 .. 10
  print x
/for

Однострочная структура

править

Если тело структура только один оператор, используется упрощенный синтаксис.

for int x in 0 .. 10 print x

For в списке

править

Для управления структурой может обходить интервалы как и выше, а также текст или массив.

text hello = "hello"
for text t in hello print t
array a = { 1, 2, 3 }
for dyn x in a print x

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

править
while x < 5
 print x
 x + 1
/while

Чтобы инкрементировать переменную x, Scriptol использует выражение X + 1. Это не работает в C и других языках.

Бесконечный цикл в С

править

В C и C-подобных языках (C++, Java, C#) легко получить бесконечный цикл. Вот два простых примера.

while(x < 5);
{
  printf("%d\n", x);
  x += 1;
}

Возможно, вы мгновенно заметил это(а возможно, нет), но это плохоt решение, в связи точкой с запятой после условия!

Другой пример без неуместной точкой с запятой:

while(x < 10)
{
  printf("%d\n", x);
  if(x = 5) continue;
  ... некоторые выражения ...
  x += 1;
}

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

править

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

scan a

a[] * a[] 
print a[] 

/scan

текущий элемент обозначается пустым.

Пример с двумя массивами:

scan a, b
 print a[] + b[] 
/scan

Обход функцией

править

Вы можете применить предопределенную функций. Аргумент функции бедет элемент массива.

array a = {1,2,3,4 }
void fun(number x) 
 print x * x
return
scan a by fun

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

XML и класс

править

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

править

Scriptol является объектно-ориентированным и использует классы и наследование. Определить класс легко. Пример очень простого класса.

class car
  int speed
  void getSpeed()
     ... some statements ...
  return speed 
/class

Но Scriptol также использует XML. Определить XML-документ также просто.

xml Car
  speed value = "10" /
  wheels number = "4"
  passengers number = "5"
     Clara, Charly, Corinna, Cyril, Cecilia
  /passengers  
/xml

Использование XML

править

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

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

Car myCar ` myCar is an instance of the Car Xml document.
print myCar.speed ` displaying the value of the "speed" attribute.
print myCar.passengers ` displaying the content of the "passengers" tag.

Импорт XML-документа

править

XML в основном полезен для выполнения процессов с документами, подготовленные различными инструментами, текстовыми редакторами, электронными таблицами, и т.д...

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

xml Car ` declaring an empty xml document.
/xml
Car myCar` defining an instance (not required).
myCar.load("document.xml")  ` loading an external xml document
Car.load("document.xml")  ` you can use directly the xml class itself

Итератор

править

Итератор на XML-документ как итератор на массив, а также down() и up() методов. Итератор позволяет проанализировать весь XML-документ или подэлементы.

demo.begin() 
while demo.isFound() 
print demo.getData() 
let demo.inc()