ПроектыЭтот раздел содержит описания некоторых моих проектов, в том числе довольно старых. Если Вас заинтересуют какие-либо подробности, смело пишите мне письмо. Задавая вопрос, укажите, пожалуйста, о каком именно проекте (языке и/или компиляторе) идет речь. 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. Документации, как водится, нет, зато есть исходные тексты и примеры. Вообще, кажется, язык слишком прост, чтобы серьезно заниматься всякими описаниями. Из примеров все и так ясно.
|