Эустеноптероны
- 1 year ago
- 0
- 0
Seed7 — язык программирования общего назначения.
Главной особенностью языка является его расширяемость. Синтаксис языка определён в одной из библиотек и может быть изменён пользователем.
Язык синтаксически подобен Паскалю и Аде . В дополнении к стандартному Паскалю и ранним версиям Ады включает механизмы объектно-ориентированного программирования а также механизмы расширения языка: мощный механизм шаблонов для определения новых синтаксических конструкций (который, подобно включает средства позволяющие задавать ассоциативность и приоритет операций ) и нечто вроде стандартных функций, позволяющих задавать семантику таких конструкций. Такие функции, выполняемые на этапе компиляции , принимают в качестве параметров переменные , типы и выражения, включаемые в синтаксические конструкции, и выполняют с ними необходимые преобразования. Если определяемая таким образом грамматика допускает двусмысленное толкование, генерируется ошибка компиляции .
Томас Мертес начал разрабатывать этот язык обучаясь в Венском техническом университете . Он стал в 1984 темой его дипломной работы , а затем, в 1986 — диссертации .
$ include "seed7_05.s7i"; const proc: main is func begin writeln ("hello world"); end func;
Здесь определяется
процедура
(функция без параметров)
main
(играющая ту же роль, что и в
языке Си
).
const func integer: fib (in integer: num1) is func result var integer: fib is 1; begin if num1 <> 1 and num1 <> then fib := fib(pred(num1)) + fib(num1 - 2); end if; end func;
Ключевое слово
in
перед объявлением параметра функции означает что это параметр
константный
, он не может изменятся в ходе выполнения функции, для объявления изменяемых параметров сложит слово
inout
. После слова
result
объявляется переменная, значение которой будет возвращаться функцией. Для объявления локальных переменных служит слово
local
.
Расширения языка включают в себя два основных этапа: синтаксическое определение, которое задаёт шаблон для новой синтаксической формы и стандартная функция Seed7 для определения семантики .
Для определения синтаксиса используется часть языка, называемая Seed7 Structured Syntax Description (S7SSD). Выражения S7SSD вида
$ syntax expr: .(). + .() is -> 7;
определяет синтаксис
операции
+
Стрелочка вправо
->
описывает
ассоциативность
: связывание операндов слева направо.
Число
7
задаёт
приоритет операции
+
. Синтаксический шаблон:
.(). + .()
отделяется символами точки (
.
). Если их опустить, он будет выглядеть как
() + ()
Символ
()
— нетерминальный, а
+
— терминальный. В S7SSD не делается различий между разными
нетерминальными символами
, вместо этого используется только один нетерминальный символ:
()
.
Определение оператора
+
для
комплексных чисел
это просто определение функции:
const func complex: (in complex: summand1) + (in complex: summand2) is func result var complex: sum is complex.value; begin sum.re := summand1.re + summand2.re; sum.im := summand1.im + summand2.im; end func;
В Seed7 используется модель объектно-ориентированного программирования, основанная не на классах и методах , но на интерфейсах и реализациях.
Доступен в виде исходных кодов под лицензиями
GPL
и
LGPL
или готовых сборок под
Windows
. В пакет входит
интерпретатор
(файл
s7
) и
компилятор
(
s7c
), генерирующий промежуточный код на
языке Си
.