spamsink: (Default)
[personal profile] spamsink posting in [community profile] besm6
Программа
_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 в Паскале есть, а в С++ - нет.

Ну и в том, что недосформированный объект, описывающий константу, зачем-то вставляется в таблицу символов до того, как проанализирована правая часть определения константы (это ошибка Пирина, у Вирта правильно).
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

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. 15th, 2026 05:18 am
Powered by Dreamwidth Studios