Jun. 8th, 2021

spamsink: (Default)
[personal profile] spamsink
Программа
_program test;
_const foo=foo;
_begin writeln(foo) _end.
на Паскаль-автокоде компилируется и печатает 0, который берётся из адреса 0, а не из константного пула, как обычно.
Константа получается целого типа, её можно присвоить целой переменной.

Аналогичная программа
program test(output);
const foo = foo;
begin writeln(foo) end.
на Паскаль-мониторе не компилируется:
 00001    1  0 PROGRAM TEST(OUTPUT);
 00001    2  1 CONST FOO=FOO;
 ******34 TИП HE COOTBETCT TИПY ЭЛEMEHTA ФAЙЛA
 00023    3  0 BEGIN WRITELN(FOO) END.
        *****                   0

Константа получается "никакого" типа, с ней ничего нельзя сделать.

В то же время этот же компилятор на С++ выдаёт
 00001    1  0 program test(output);
Error 6: Missing constant 
Error 12: Bad symbol 
 00001    2  1 const foo=foo;
       ^^^^^               01
 00015    3  0 begin writeln(foo) end.

А всё дело в разнице между константой 0 и значением указателя NIL, которая на БЭСМ-6 в Паскале есть, а в С++ - нет.

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

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 07:24 am
Powered by Dreamwidth Studios