Jun. 4th, 2021

spamsink: (Default)
[personal profile] spamsink
Решил я посмотреть, как выглядит Паскаль-компилятор в отформатированном с помощью pretty-принтера виде.
Нашлась такая и для Паскаля-автокода в системе "Пульт". Она почему-то называется "ЛЕС".

  СИСТЕМА ПУЛЬТ   04.06.81    
ЛЕС
 ==> 500101 30
 
0001 (*=М-,С-*) 
0002 ._РRОGRАМ СОМРIL ., 
0003    ._LАВЕL 27721., 
0004    ._СОNSТ 
0005       SРАСЕS = ’      ’., 
0006       SР     = ’ ’., 
0007       АSG    = ’.==200’., 
0008       С4096  = 4096., 
0009       Т      = ТRUЕ., 
0010       F      = FАLSЕ., 
0011       О      = ’0’., 
0012       ВRАNСН = ’ВRАNСН’., 
0013       ВАСК   = ’ВАСК’., 
ИДТИ?


Вроде, всё прекрасно (при выдаче на АЦПУ по команде "ПА" перед "ЛЕС" все символы будут выдаваться правильно и без "ИДТИ?"), но вдруг

0097    ._ТУРЕ 
0098       ВIТSЕТ = ._SЕТ ._ОF 0 .. 47., 
        ОШИБКА=203 СИМ=  СТР=        21 
КОНТЕКСТ= 
ТТЕR = ’А’..’Z’.,
INТ=INТЕGЕR.,ВООL=ВО


Никаких ошибок в исходной строке 21
letter = 'a'..'z';

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

В конце концов мне удалось понять, в чём дело - она не любит пробелы вокруг знака равенства в объявлении типов; и облагороженная сама собой, она выглядит так:несколько отрывков )
Всё очень красиво, даже с небольшими отступами для вложенных подпрограмм, но в то же время довольно компактно: последовательности операторов присваивания подверстываются в строку, пробелы в выражениях ликвидируются, и т.п.
Никаких опций не предусмотрено, сокращённая запись _( и _) для _begin и _end разворачивается в представление в виде слов безусловно. Впрочем, это и неважно, раз
begin и end всегда оказываются на отдельной строке.

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

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

Небольшое замечание: Диалоговый интерфейс у программы очень молчаливый, хотя свободного места в последней зоне ещё хватало - примерно ползоны (3 Кб). Какие-либо приветствия отсутствуют; вместо того, чтобы на непонятную строку рассказывать, какой ожидается формат указания расположения входного и выходного файлов, программа говорит НЕ БУДУ; а после 5 неудачных попыток ДЛЯ ВЫХОДА СДЕЛАЙТЕ "ЕТХ". Вот когда надо было придумать мем "капитан Очевидность".
spamsink: (Default)
[personal profile] spamsink
...или об автоматизации release management в прошлых веках.

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

В отсутствие каких бы то ни было систем контроля версий и трекинга изменений, кроме более или менее регулярных резервных копирований, полезно было также уметь коррелировать двоичный файл с версией исходного текста. Для этого после успешной компиляции/тестирования исходный текст редактировали, вписывая туда в комментарий дату/время/размер полученного двоичного файла. Это, видимо, достаточно часто забывали/ленились делать, поэтому была создана специальная программа "Лентяй", которая была пристыкована к запускалке компилятора.
Если при компиляции был указан псевдокомментарий (*=Л+*), то после успешной компиляции программа "Лентяй" пыталась найти в начале программы комментарий в определённом фиксированном формате, и заменяла его содержимое на дату/время/максимальный адрес загрузки полученной программы, а также печатала некоторую статистическую информацию.
собственно программа )
Особо оцените способ проверки соответствия шаблону.
Под лозунгами "ПИР" И "ЧАЙ" печатаются времена выполнения Паскаль-компилятора (им. С. И. Пирина) и Автокода ИТМ (им. М. Г. Чайковского).

Результат выглядит, например, так:
0001 (*=Р-,Т-,М-,Л+*)_РRОGRАМ ЛЕНТЯЙ;
0002 (* 05.06.21 00.14 МАХАDR=00615 *)

Profile

Сообщество любителей БЭСМ-6

December 2025

S M T W T F S
 123456
78910111213
14151617181920
21222324252627
282930 31   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 13th, 2026 02:42 am
Powered by Dreamwidth Studios