Seed7 | |
---|---|
Семантика | императивный, объектно-ориентированный |
Класс языка | язык программирования, объектно-ориентированный язык программирования и мультипарадигмальный язык программирования |
Тип исполнения | интерпретатор, компилятор |
Появился в | 2005 |
Автор | Томас Мертес |
Расширение файлов |
.sd7 или .s7i |
Выпуск | 05_20180821 (21 Август 2018) |
Система типов | строгая, статическая |
Испытал влияние | Ada, C/C++, Java |
Лицензия | GNU GPL и GNU LGPL |
ОС | кроссплатформенность |
Сайт | seed7.sourceforge.net |
Seed7 — язык программирования общего назначения.
Главной особенностью языка является его расширяемость. Синтаксис языка определён в одной из библиотек и может быть изменён пользователем.
Язык синтаксически подобен Паскалю и Аде. В дополнении к стандартному Паскалю и ранним версиям Ады включает механизмы объектно-ориентированного программирования а также механизмы расширения языка: мощный механизм шаблонов для определения новых синтаксических конструкций (который, подобно Camlp4 включает средства позволяющие задавать ассоциативность и приоритет операций) и нечто вроде стандартных функций, позволяющих задавать семантику таких конструкций. Такие функции, выполняемые на этапе компиляции, принимают в качестве параметров переменные, типы и выражения, включаемые в синтаксические конструкции, и выполняют с ними необходимые преобразования. Если определяемая таким образом грамматика допускает двусмысленное толкование, генерируется ошибка компиляции[1].
Томас Мертес начал разрабатывать этот язык обучаясь в Венском техническом университете[2]. Он стал в 1984 темой его дипломной работы[3], а затем, в 1986 — диссертации[4].
$ 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 для определения семантики[1].
Для определения синтаксиса используется часть языка, называемая 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
), генерирующий промежуточный код на языке Си.
![]() |
Это заготовка статьи о компьютерных языках. Вы можете помочь проекту, дополнив её. |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .