Алексей Яковлев
Главная страница | Последние новости | Избранные проекты | Загрузка файлов | Чужие проекты | Ссылки по теме | Графический стиль | 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.

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



Главная страница | Последние новости | Избранные проекты | Загрузка файлов | Чужие проекты | Ссылки по теме | Графический стиль | English

Copyright © 2000-2003 YALLIE, Inc. All Rights Reserved
webmaster: yallie@yandex.ru


Используются технологии uCoz