Ethereal писал(а):
И вот надо одну идею у Вирта спереть в Форт. Слова CASE OF ENDOF ENDCASE когда-то предложил некто Dr.Eaker (не знаю кто это). Так вот у него неразрешенные еще ссылки вперед накапливаются на стеке и самым верхним лежит счетчик этих ссылок. А у Вирта неразрешенные ссылки вперед прямо в коде образуют список. Один хрен, пока адреса этих переходов не разрешены, их значения смысла не имеют. Так вот Вирт заставил их одно ссылаться на другое. И чтобы адреса разрешить надо иметь на стеке только одно значение - адрес самого последнего неразрешенного перехода. И потом от последнего к первому по этому списку пройтись. Красиво очень. Вот надо такой CASE сделать.
Замечательный подход!
Ethereal писал(а):
P.S. У Вирта накомпилированный код собирался в памяти и только в конце трансляции сбрасывался в файл. Я поначалу стал писать, чтобы этот код сразу выдавался как выходной поток. И напоролся, что при однопроходной трансляции из-за неразрешенных ссылок вперед это невозможно. Ну, чтобы не переделывать то, что уже написано, отправил выходной поток в файл и начал адреса переходов корректировать прямо в выходном файле, с помощью перемещения указателя в нем SEEK. Но вот сейчас пришла мысль, что если работу по разрешению ссылок вперед отдать ассемблеру, то однопроходная компиляция, как преобразование потока возможна. Т.е. компилятор принимает входной поток на Обероне и тут-же выдает выходной поток на ассемблере. А уж ассемблер о разрешении переходов на метки вперед позаботится. Вот так надо сделать.
Почему-то вспомнился компилятор Абадябера Lint языка Степлер, который из-за байткода может одно из 3-х: исполнить, транслировать в листинг ассемблера, или сразу в com-файл. На этой странице вы можете найти ссылки:
http://abaduaber.ru/Prog.htmА вот прямая ссылка:
http://abaduaber.ru/my/lastlint.zipgudleifr писал(а):
Вот именно поэтому я и "обижаю" коллегу _KROL.
А я в принцепи особо не обижаюсь) Можно вопрос? Где найти вышеперечисленные книги?
gudleifr писал(а):
покурить Брэдли или Скэнлона, для экстрима пролитсать Джордейна