Лучшие вопросы
Таймлайн
Чат
Перспективы

Seed7

Из Википедии, свободной энциклопедии

Remove ads

Seed7 — язык программирования общего назначения.

Краткие факты Семантика, Класс языка ...

Главной особенностью языка является его расширяемость. Синтаксис языка определён в одной из библиотек и может быть изменён пользователем.

Remove ads

Особенности

Язык синтаксически подобен Паскалю и Аде. В дополнении к стандартному Паскалю и ранним версиям Ады включает механизмы объектно-ориентированного программирования а также механизмы расширения языка: мощный механизм шаблонов для определения новых синтаксических конструкций (который, подобно Camlp4[англ.] включает средства позволяющие задавать ассоциативность и приоритет операций) и нечто вроде стандартных функций, позволяющих задавать семантику таких конструкций. Такие функции, выполняемые на этапе компиляции, принимают в качестве параметров переменные, типы и выражения, включаемые в синтаксические конструкции, и выполняют с ними необходимые преобразования. Если определяемая таким образом грамматика допускает двусмысленное толкование, генерируется ошибка компиляции[2].

Remove ads

История

Томас Мертес начал разрабатывать этот язык обучаясь в Венском техническом университете[3]. Он стал в 1984 темой его дипломной работы[4], а затем, в 1986 — диссертации[5].

Примеры

Hello World
$ 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 для определения семантики[2].

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

Для определения синтаксиса используется часть языка, называемая 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;
Remove ads

Объектно-ориентированное программирование

В Seed7 используется модель объектно-ориентированного программирования, основанная не на классах и методах, но на интерфейсах и реализациях.

Реализация

Доступен в виде исходных кодов под лицензиями GPL и LGPL или готовых сборок под Windows. В пакет входит интерпретатор (файл s7) и компилятор (s7c), генерирующий промежуточный код на языке Си.

См. также

Примечания

Литература

Ссылки

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads