]]> ]]>

Sanscript

Реализация языка программирования Sanscript

Родная (и единственная) среда разработки языка Sanscript. Разработана Northwoods Software. В апреле 2000 года была сделана бесплатной, но при этом поддержка разработчиков была прекращена. Написана на C++/MFC.

Примеры:

Hello, World!:

Пример для версий Sanscript 2.2

Диаграмма функций для этого примера состоит из двух функций — константы “Hello, World!” и “Display Message”, которая выводит эту константу на экран.

Hello, World! на Sanscript
Hello, World! на Sanscript

Факториал:

Пример для версий Sanscript 2.2

Первый скриншот показывает главную диаграмму потоков. Ее основной частью является функция Repeat (аналог циклов в других языках), которая рассчитывает факториалы чисел и записывает их в список. У этой функции две пары входных и выходных контактов, которые соответствуют глобальным переменным в других языках, — factorial (хранит текущее значение факториала) и message (список строк текста (n)! = (n!)). Кроме того, есть еще один входной контакт N, который задает нужное количество итераций.

Входные контакты инициализируются константами и пустым списком, и цикл начинается. После конца вычислений message нужно вывести на печать. Это можно сделать при помощи функции Write List as Text, которая конкатенирует элементы списка в одну строку с заданным разделителем. Разделитель задается входным контактом sep; в данном случае это символ новой строки, сгенерированный функцией Char, которая преобразует ASCII-код в соответствующий символ. Наконец, полученная строка показывается функцией Display Message.

Второй скриншот демонстрирует внутренности функции Repeat. Элемент, обозначенный как “1, 2 …”, — счетчик цикла, начинающийся с 1 и увеличивающийся на 1 каждую итерацию. На каждой итерации factorial умножается на значение счетчика (функция Times). После этого новое значение конкатенируется со счетчиком и константой "! = " (функция Append Text). Наконец, полученная строка добавляется в список message (функция Add Last Item).

Факториал на Sanscript - главная диаграмма потоков
Факториал на Sanscript - главная диаграмма потоков

Факториал на Sanscript - блок Repeat
Факториал на Sanscript - блок Repeat

Числа Фибоначчи:

Пример для версий Sanscript 2.2

Числа Фибоначчи вычисляются так же, как факториал: цикл-Repeat вычисляет список чисел, начиная с двух первых, после чего список конкатенируется в выводимое сообщение. Внутри цикла текущее число добавляется к списку и заменяется на следующее, а следующее — на сумму текущего и следующего.

Числе Фибоначчи на Sanscript - главная диаграмма потоков
Числе Фибоначчи на Sanscript - главная диаграмма потоков

Числе Фибоначчи на Sanscript - блок Repeat
Числе Фибоначчи на Sanscript - блок Repeat

Квадратное уравнение:

Пример для версий Sanscript 2.2

Этот пример содержит много условных переходов, а в Sanscript каждая ветвь описывается отдельной диаграммой.

Квадратное уравнение - главная диаграмма потоков
Квадратное уравнение - главная диаграмма потоков

Квадратное уравнение - условие A=0
Квадратное уравнение - условие A=0

Квадратное уравнение - условие A=default
Квадратное уравнение - условие A=default

Квадратное уравнение - условие D=0
Квадратное уравнение - условие D=0

Квадратное уравнение - условие D=default (!=0)
Квадратное уравнение - условие D=default (!=0)

Квадратное уравнение - условие D>0
Квадратное уравнение - условие D>0

Квадратное уравнение - условие D<0
Квадратное уравнение - условие D<0

CamelCase:

Пример для версий Sanscript 2.2

На первой диаграмме текст, введенный пользователем, переводится в нижний регистр и передается в цикл посимвольной обработки. На второй — блок Split Text используется для выделения очередного символа строки, который затем сравнивается со строками-ограничителями (ASCII-коды которых равны a-1 и z+1), и результат сравнения передается в блок выбора действия. На третьей — если символ является буквой, то в зависимости от значения lastSpace к результату добавляется либо сам символ, либо он же, переведенный в верхний регистр; кроме того, значение lastSpace устанавливается в FALSE. На четвертой — если символ не является буквой, то только изменяется значение lastSpace.

CamelCase - главная диаграмма потоков
CamelCase - главная диаграмма потоков

CamelCase - блок Repeat
CamelCase - блок Repeat

CamelCase - обработка символа-буквы
CamelCase - обработка символа-буквы

CamelCase - обработка символа-разделителя
CamelCase - обработка символа-разделителя


Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам