Иван Денисов писал(а):
Опубликована длинная заметка с обоснованием проводимых изменений в части фронтенда
https://vk.com/@herschelcompiler-zachem ... i-simvolovИз заметки:
Цитата:
Моя догадка — в том, что структура ТС была разработана еще для Модулы, в которой нет расширения типов. Т.е. Сам Вирт заложил ее основы, и потом ее развил г-н Крелье в компиляторе OP2, и до нас она дошла в виде СР2.
Вирт пишет в книге «Построение компиляторов», что он не использует расширение типов потому, что это усложняет код, и в данном месте это не нужно. Т. е. чтобы не умничать. Но в Oberon-07 всё как-то проще сделано, без всяких intval'ов. Там есть поля с названиями вида «a», «r» и есть маленькая табличка, где написано, что что означает. Я делал также, лично у меня особых трудностей не возникло. Может быть, из-за других, менее значащих (и поэтому не столь сбивающих с толку) названий полей и типов.
Например, в ББ записи, которые обозначают типы, называются почему-то структурами. Хотя структурой можно назвать записевый тип, ну и, например, массив... ну и процедурный тип, допустим. А INTEGER, BOOLEAN и прочее? Зачем там слово «структура»? Оно действительно сбивает с толку. В Обероне-07 это называется просто Type. То есть есть Object (всё, что в компилируемой программе имеет имя: константа, переменная, (пред-)объявленный тип, процедура или модуль), а есть Type (не имеет имени, обозначает форму типа, включая и базовые типы, и записи, и массивы, и процедуры). А в генераторе есть ещё Item, который представляет собой вещь, которую компилятор «держит в руках» непосредственно в процессе компиляции
тел процедур. То есть при объявлении переменных и т. п. у нас есть только Object'ы и Type'ы, они помещаются в так называемую таблицу символов. А при собственно компиляции, когда вот-вот придёт время уже выдавать действительный машинный код и в процессе такой выдачи, появляются Item'ы, ссылающиеся на эти Object'ы. Причём Object'ы и Type'ы — переменные динамические, а Item статические, т. к. имеют смысл только в пределах соответствующих запущенных в данный момент процедур компиляции.