Scriptol
Язык программирования 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" ключевое слово.
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
For In
правитьОбщий синтаксис
правитьСтандартный синтаксис присваивает переменной с элементами в диапазоне в 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
правитьОбщий синтаксис
править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
XML
правитьНо 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()