Насколько безумен был Алгол-60
Jul. 11th, 2021 03:10 pmПрограмма
1. _BEGIN 2. _PROCEDURE POP(Q); _PROCEDURE Q; 3. _BEGIN Q(3); _END; 4. 5. _PROCEDURE PIP(A); _LABEL A; 6. _BEGIN _GOTO A; _END; 7. 8. _PROCEDURE PAP(B); _INTEGER B; 9. _BEGIN OUTPUT(‘T’, ‘INTEGER ’, ‘ZD’, B) _END; 10. 11. POP(PAP); 12. _IF _FALSE _THEN 3: OUTPUT(‘T’, ‘ LABEL 3’) _ELSE POP(PIP); 13. _ENDкомпилируется и работает, печатаяINTEGER 3 LABEL 3
no subject
Date: 2021-07-11 10:22 pm (UTC)no subject
Date: 2021-07-11 11:10 pm (UTC)no subject
Date: 2021-07-12 01:36 pm (UTC)no subject
Date: 2021-07-12 04:41 pm (UTC)no subject
Date: 2021-07-12 04:46 pm (UTC)no subject
Date: 2021-07-12 05:30 am (UTC)no subject
Date: 2021-07-12 04:33 pm (UTC)Тут, кстати, не преобразование, а чисто контекстная интерпретация: написать 2+1 вместо 3 нельзя.
Дело в том, что при компиляции формальных процедур всё равно приходится дожидаться конца программы, чтобы выяснить, как компилировать параметр, передаваемый в формальную процедуру: может, одна фактическая принимает параметр по значению, а другая - по имени. Так что дополнительный вариант трактовки целой константы как метки не сильно усложняет компилятор.
no subject
Date: 2021-07-12 08:35 pm (UTC)no subject
Date: 2021-07-12 10:01 pm (UTC)no subject
Date: 2021-07-12 10:10 pm (UTC)