Алексей Яковлев
ENGLISH
Избранные проекты
Главная страница
Последние новости
Избранные проекты
Загрузка файлов
Чужие проекты
Ссылки по теме
Панель управления
Выбор языка
Русский (по умолчанию)
English
Выбор палитры
Сирень (по умолчанию)
Кирпичные стены
Серебристые тени
Тонкие линии
Стиль отображения
Графический (по умолчанию)
Только текст (для печати)

Проекты

Этот раздел содержит описания некоторых моих проектов, в том числе довольно старых. Если Вас заинтересуют какие-либо подробности, смело пишите мне письмо. Задавая вопрос, укажите, пожалуйста, о каком именно проекте (языке и/или компиляторе) идет речь.

Yalgol

Этот проект состоит из двух частей: алгоритмический язык Yalgol/02 и компилятор языка Yalgol/02 для платформы Win32 (написанный, разумеется, на Yalgol/02). Язык Yalgol является императивным объектно-ориентированным языком программирования. Он все еще развивается, и в третьем поколении языка планируется множество нововведений.

Материалы проекта Yalgol (некоторые из них, возможно, еще не опубликованы):

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


Другие проекты

У меня есть проекты, не имеющие прямого отношения к языку Yalgol, но еще не перешедшие в раздел старых проектов. Они все еще могут обновляться время от времени.

Brainf*ck compiler

По-видимому, самый маленький в мире компилятор для платформы IBM PC. Исполняемый файл имеет размер 161 байт. Он представляет собой COM-файл и генерирует также COM-файлы. Входной язык называется Brainf*ck, изобрел его Urban Muller как раз с целью создания самого маленького в мире компилятора. Его компилятор, написанный для Amiga OS 2.0, был размером 240 байт. Позже автору удалось улучшить результат до 200 байт.

Написание программ на языке Brainf*ck приносит еще большее удовольствие, чем создание микроскопических компиляторов для него. Недавно я с удивлением обнаружил, что в мире есть довольно много фанатов этого увлекательного занятия. По-видимому, язык вполне оправдывает свое название.

Hypertext compressor

Довольно забавный упаковщик HTML-кода, написанный на Перле. Сжимает HTML, Javascript, CSS и даже PHP (хоть и непонятно, зачем) – естественно, разными методами. Все это, впрочем, отключается при желании. Пакует IMHO весьма неплохо.

В HTML вырезаются комментарии, ненужные пробелы, аккуратно пакуются тэги, удаляются лишние кавычки в параметрах (например, Width="0" преобразуется в Width=0). В Javascript и CSS удаляются комментарии и все пробелы между лексемами разного класса. Особенности поведения настраиваются ключами командной строки.

Вообще, этот htcomp.pl работает довольно разумно. Мне некогда описывать подробности, да я уже и не помню всего, что он умеет. Я сам иногда удивляюсь, заметив за ним ту или иную удивительную способность.

Для того, чтобы этот скрипт заработал, необходим Perl 5.005 и некоторые начальные навыки работы с ним (имеется в виду умение запускать скрипты). У меня никакой документации по данному вопросу нет, но это очень популярная тема, по которой можно легко найти множество материалов. Поищите в любой поисковой системе.


Старые проекты

Здесь вкратце описаны проекты, опубликованные на прошлых вариантах этой домашней страницы. Они уже давно не обновляются, и я сохранил их здесь просто на всякий случай. Так сказать, для обратной совместимости.

Why (Why not a Compiler?)

Чем не компилятор? — мое первое 32-битное детище. Несложный компилятор из Форт-подобного языка Why в язык ассемблера процессора i386. Написан на основе моего старенького 16-битного компилятора этого же языка.

Генерирует довольно удачный код, который выполняется заметно быстрее, чем у большинства компиляторов Форта. Верхние элементы арифметического стека хранит в регистрах процессора, поэтому слова dup, drop, swap и rot часто не генерируют никакого исполняемого кода, а только влияют на выполнение следующих за ними слов.

Язык только слегка смахивает на Форт с некоторыми вариациями, которые появились под влиянием Си и Алгола. На самом деле это совершенно не совместимый с ним язык. Управляющие конструкции Форта присутствуют, кажется, все, а вот runtime-библиотека совершенно другая. В основной библиотеке есть специфические функции работы со стеком, строками символов, целыми числами, а также консольный ввод-вывод. Есть дополнительная библиотека работы с 256-цветной VGA-графикой, довольно эффективная. В ней используются, в основном, алгоритмы Брезенхема, реализованные целиком на языке Why.

Материалы проекта Why:

JAL01

Первый компилятор языка семейства Yalgol (входной язык — Yalgol/01).

Этот компилятор я написал в совершенной спешке и исключительно для собственного использования. За основу был взят движок Why и еще какие-то старые проекты, всего уже не помню. В языке Yalgol/01 есть контроль типов, перегрузка функций, динамическое распределение памяти и объекты (зато нет структур, указателей и, смешно сказать, массивов). Несмотря на свои очевидные недостатки, язык весьма красив и удобен, и на нем можно писать всякие серьезные вещи. Например, компиляторы следующего поколения.

Проект никогда не был доступен для какого бы то ни было обозрения. Компилятор я написал одним махом и дописывать не собирался, в нем были ошибки и неудобные недоделки, поэтому он остался моим личным инструментом, которым я пользовался при создании Yalgol/02.

JadScript (Just Another Data Definition Scripting Language)

"Еще один язык описания данных." Язык, предназначенный для описания иерархических структур объектов. Написан совершенно случайно, без всякой задней мысли.

Этот специфический проект я сделал большей частью из-за лени, чтоб не изучать какие-нибудь существующие технологии. Язык описания данных делался для вполне определенной цели, для хранения проектов САПР ПО, а получился довольно-таки универсальным. Например, документы на языке HTML можно перевести на JadScript и обратно без потери информации (если, конечно, подойти к этому вопросу серьезно ;)

Суть языка проста до безобразия и включает в себя всего три понятия: объект, тип и атрибут. Любой объект имеет тип, набор атрибутов и детей — объектов следующего уровня иерархии. Таким набором я надеялся описать любую иерархическую систему с древовидной структурой.

Компилятор этого языка, как и JAL01, написан на основе Why, отчасти из-за довольно удачной организации последнего, отчасти от нехватки времени на создание чего-нибудь еще более удачного. По стилю язык немного смахивает на семейство Yalgol.

Документации, как водится, нет, зато есть исходные тексты и примеры. Вообще, кажется, язык слишком прост, чтобы серьезно заниматься всякими описаниями. Из примеров все и так ясно.



Copyright © 2000-2003 YALLIE, Inc. All Rights Reserved
webmaster: yallie@yandex.ru
Используются технологии uCoz