Здравствуйте!

Этот сайт о программах и компьютерах. Его содержание связано с моей профессией, но не прямо. У меня нет программистского образования, учиться мне пришлось самому и я обнаружил что многие сложные вещи на самом деле просты, но вот понять их не всегда просто...

Сайт был создан в 2000 году и в начале содержал лишь один текст "Как создать язык программирования и транслятор (сейчас в архиве context.zip), написан он был в 1997 году. Позже этот текст несколько раз переписывался, был написан относительно простой демонстрационный компилятор. В 2005 году он был заменен почти таким же маленьким компилятором, способным компилировать себя. Затем был написан синтаксически-управляемый компилятор и, как я думаю, очень простое объяснение синтаксически-управляемого разбора текста.

Также здесь есть несколько других текстов о языках программирования, компиляторах и общеупотребительных алгоритмах.


26.05.2016

1016 лет назад был создан этот сайт.

Оказывается, счетчик top.mail.ru хранит статистику за все это время. Следующая диаграмма - результат несложной обработки данных счетчика:

Statistics (parts) from 2000-06 to 2016-04

Число просмотров пяти самых посещаемых страниц (p1100ru.htm и page110.htm примерно до 2013 года совпадали). Довольно большая часть прочих - всего лишь просмотры страниц навигации:

Statistics (top) from 2000-06 to 2016-04

Если же ограничиться основной темой сайта, три страницы заменяются:

Statistics (languages and compilers) from 2000-06 to 2016-04

01.02.2013

В 2008 году я упоминул синтаксически-управляемый аналог простого компилятора. До конца я его не довел и решил опубликовать часть имеющихся материалов как есть.

08.01.2011

Еще один простой компилятор.

26.05.2010

Десять лет назад был создан этот сайт. За прошедшие два года ничего нового не появилось...

06.11.2009

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

24.04.2009

Исправлены две ошибки в компиляторе Context 2.2 (код косвенного вызова функции был некорректным, в некоторых случаях код вычисления смещения элемента многомерного массива также был некорректным). Все известные на сегодняшний день ошибки исправлены.

Также я попытался составить список дефектов языка и дефектов архитектуры компилятора. В отличие от списка ошибок здесь все не так очевидно.

26.05.2008

108 лет назад я поместил здесь исходный текст компилятоpа и описание того, как он был сделан. В то вpемя он пpедставлялся достаточно маленьким и пpостым, позже стало ясно, что начинать надо с гоpаздо меньшего.

Это не пеpвая публикация такого pода, но и не воспpоизведние чего-то pанее опубликованного.

Фоpмальное описание языка Context так и не было написано. В 1995 году я посчитал словесное описание достаточным, в основном из-за непонимания идей синтаксически-упpавляемого pазбоpа. Сейчас могу сказать, что синтаксически-упpавляемый компилятоp может быть столь же мал, как и написанный вpучную, он может быть коpоче 1000 стpок исходного кода, хотя до пpиемлемого для публикации уpовня я его так и не довел.

А самой посещаемой стpаницей почему-то стала эта...

11.09.2007

Исправлена ошибка в Linux-версии Context 2.0 (При создании ассемблерного листинга некорректно назначались атрибуты). Это первая ошибка, которая была обнаружена не мной.

Для работы в Linux должен использоваться FASM 1.66 или более поздний.

28.06.2007

Обновление Context 2.0. Версия 2.16 может работать и создавать код для Linux (i386), исправлены две небольшие ошибки.

15.03.2007

Обновлены результаты тестов.

28.12.2006

Исправлены три старые ошибки - две в сканере и одна в компиляторе выражений (код сравнения вещественных чисел был некорректным). Ошибки в сканере были с самого начала и переносились во все последующие версии. Исправлены они пока только в DOS-версиях 1.03, 1.10 и 1.20. Описание большей части выявленных ошибок можно посмотреть здесь.

30.10.2006

Во всех DOS-версиях компилятора исправлена старая ошибка - функции могли не завершаться командой ret. Ошибка имела место если функция завершалась кодом

if Условие then // while, repeat return end

В Context 1.03 также исправлено некорректное преобразование типа char в word. Все исправления в архивах context.zip и samples.zip.

28.06.2006

Обновлены результаты тестов компиляторов и процессоров. Пока правда это касается только английской версии.

19.06.2006

Два текста, к которым автор или не имеет прямого отношения или не имеет отношения вообще. Это выполненный кем-то перевод на C++ Context'а 2.07 (интересно, зачем?) и очень маленький компилятор C, меньше 700 строк кода и при этом он включает довольно много элементов языка и может компилировать себя. Автор последнего - Леннард Аугустссон (Lennart Augustsson).

15.05.2006

Исправлены ошибки в Pascal-S (разбор и генерация кода для оператора case) и TinyContext (функции могли не завершаться командой ret, эта ошибка есть и в Context для DOS).

В TinyContext добавлены локальные переменные и параметры, правда отличные от оригинала.

12.12.2005

Исправлены ошибки в Context'е для Windows:

и в Pascal-S:

19.10.2005

Компилятор из статьи в журнале "Мир ПК". Исправлены некоторые незначительные погрешности.

02.06.2005

Немного статистики.

12.05.2005

В журнале "Мир ПК" #5/2005 и CD-приложении к нему опубликована моя статья "Простой компилятор". В ней достаточно подробно рассмотрен маленький (769 строк текста, 5997 байт кода) компилятор немного измененного подмножества Сontext'а. По размеру он сравним со старым демонстрационным компилятором (714 строк текста, 8249 байт кода), но в отличие от него может компилировать себя. Для первой компиляции использовался context 1.30, context 1.03 также может быть использован. Из-за различия в использовании памяти для первой компиляции в начало текста нужно добавить строку

char Temp [16640];

Без ошибок не обошлось. На стр. 4 в таблице используемых команд процессора вместо

mov [IDX+Ofs], SRC

следует читать

mov [BX+Ofs], SRC

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

03.05.2005

В DOS-версиях компилятора 1.03, 1.10 и 1.20 исправлена ошибка в разборе списка параметров функции (некорректный список мог считаться корректным).
В Pascal-S исправлена погрешность в генераторе кода оператора case (исключен лишний переход).

13.01.2005

31.12.2004 завершены два опроса посетителей. Результаты можно увидеть здесь.

29.11.2004

Исправлены незначительные погрешности в Windows-версии компилятора. Context 2.02 вновь доступен.

28.09.2004

Обновлена Windows-версия компилятора. Исправлены две ошибки в генераторе кода (в некоторых случаях некорректно вычислялись смещения объектов), заменен целевой ассемблер (теперь используется свободно распространяемый FASM), реализовано несколько небольших дополнений (в том числе инициализация глобальных переменных и вычисление константных выражений).

Продолжается опрос. Если Вы зашли сюда не случайно, пожалуйста ответьте на два вопроса об устройстве языков программирования.

11.05.2004

В архив добавлен еще один компилятор - клон Context'а с постфиксным оператором вычисления адреса.

05.01.2004

Незначительные изменения в компиляторе и ассемблере для DOS.

03.12.2003

Год назад я разместил здесь вопросы об устройстве языков программирования. Если Вы зашли сюда не случайно, пожалуйста ответьте на них. Опрос продлен до конца 2004 года.

29.09.2003

Обновлена минимальная версия компилятора для DOS. Исправлена ошибка в разборе списка параметров функции, немного сокращен исходный текст.

24.09.2003

Незначительные изменения в ассемблере и его описании.

13.08.2003

Изменение дизайна завершено...

27.07.2003

Новые результаты тестов. Они выполнены почти на всех процессорах, когда-либо применявшихся в IBM PC - от 8086/4.77 до P4/2400.

Немного изменен дизайн - теперь нет фреймов, точнее фреймы остались лишь на странице опросов. В остальном все как было - минимум графики и почти полное отсутствие стилей. Не все страницы изменены, так что меню в верхней части может исчезать. Старый вариант также доступен.

14.07.2003

Новые результаты тестов компиляторов. Более двадцати процессоров от 286/12 до P4/2400.

03.03.2003

Context 2.0 для Windows.

Обновлены некоторые страницы документации, в том числе страница рекурсивных функциях. Добавлен еще один пример компилятора.

Если Вы зашли сюда не случайно, пожалуйста ответьте на мои вопросы об устройстве языков программирования.

02.12.2002

Если Вы зашли сюда не случайно, пожалуйста ответьте на мой вопрос.

18.11.2002

Еще один пример - компилятор context.bin. Это минимальная версия компилятора для DOS, сразу создающая COM-файл и поддерживающая два набора ключевых слов. Около года назад я думал о замене части слов (if/then/elseif/else вместо select/case, do ... end вместо неестественного while TRUE do ... end, const вместо define, := вместо = для присваивания, пустой оператор null) и почти все отклонил - в версии для Windows будут только do ... end, null и, может быть, второй оператор присваивания. Встроенный ассемблер распознает только команду db. Структура context.bin сходна со структурой базовой версии, но она несколько более запутана - не было смысла вносить большие изменения в старый текст, версия для Windows будет проще...

Полностью переписано описание устройства компилятора. Помимо собственно описания в нем содержится текст упрощенного компилятора.

10.06.2002

Обновлены компилятор, ассемблер и примеры программ. Базовая версия компилятора заменена минимальной, для компиляции примеров следует использовать ОО-версию (context.sim). Многопроходный ассемблер более недоступен, возможности однопроходного ассемблера теперь достаточны для компиляции всех примеров. Незначительно изменена структура компилятора, исправлены обнаруженные ошибки:

23.04.2002

Обновлены все страницы, касающиеся алгоритмов сортировки и поиска.

14.02.2002

Еще раз обновлены результаты тестов.

27.12.2001

Обновлены результаты тестов. Теперь есть результаты P4/1500. К сожалению, тест до сих пор не выполнен IBM PC (XT) - может у кого сохранилась такая машина?

28.09.2001

В архив программ добавлена объектно-ориентированная версия компилятора и демонстрационный пример. Упрощенная версия компилятора несколько уменьшена. Все изменения здесь (english page - updated). Также имеется краткое описание изменений в компиляторе и примера

31.07.2001

Обновлен архив с примерами программ:

В описание языка добавлено объектно-ориентированное расширение. Все изменения здесь (english page - updated). Соответсвующая версия компилятора (1.2) будет доступна в сентябре.

29.04.2001

Еще одна страница - Алгоритмы сортировки. На странице Усовершенствование компилятора обновлены результаты тестов - теперь на процессорах Athlon и PentiumIII. Тест на Duron/600 выполнил в феврале некто, скрывающийся под псевдонимом 8086. Результаты показались мне странными, но на Athlon они повторились...

08.02.2001

В начале февраля что-то произошло и несколько файлов (в том числе все *.zip) потерялись. Обнаружил я это только сегодня, файлы загружены повторно...

18.10.2000

В компиляторе Context исправлена ошибка и несколько погрешностей (ошибка не влияла на сам компилятор). Несколько изменен ассемблер. Все исправления в архиве context.zip. Добавлены примеры программ на языке Context (samples.zip) в том числе более качественный компилятор. Необходимая информация для его сборки на странице Усовершенствование компилятора. Там же приведены результаты некоторых тестов, выполненных на ПЭВМ с процессорами от 286 до PentiumII.

18.07.2000

Глава о сжатии данных дополнена описанием алгоритма Хаффмана.

26.06.2000

Описание языка Context изменилось, надеюсь в лучшую сторону-смотрите Содержание, но старый вариант сохранен. Также появилась первая часть главы о сжатии данных (Алгоритм LZSS).

05.06.2000

Страница стала немного более упорядоченной. Добавлена глава о рекурсивных функциях.

26.05.2000

Моя страница размещена на сервере narod.ru. Форма пока очень простая, содержание раздела "Язык Context" почти не отличается от размещенного на Куличках (Компиляторы: принципы, методы и средства разработки). В описании исправлены несколько опечаток.

Рейтинг@Mail.ru

Сайт создан в системе uCoz