Макросы, дружественные к переводу

Только технические вопросы по ЯОС и MINOS. Терминология и прочее - в других форумах.
Ответить
БудДен
Сообщения: 3069
Зарегистрирован: 07.10.18 14:01

Макросы, дружественные к переводу

Сообщение БудДен » 14.01.25 14:50

Общая теория

Перевести можно то, что во время трансляции макроса разрешено в Символ("Модуль.ОВ.ОВ.член"). Для этого достаточно, чтобы:
  • все ветки макроса покрывались в процессе перевода
  • каждый кусок превращён либо в символ вида Модуль.ОВ...ЧленОВ, либо в ключевое слово, либо в
    языково-нейтральную сущность (например, комментарий)
  • запоминалось соответствие между исходным текстом шаблона или иного файла и символов
Конкретная реализация

Самое простое для шаблонов с подстановками
  • шаблонный модуль можно сделать просто модулем, т.е. обозначения формальных параметров должны быть сами по себе валидными значениями параметров. Тогда этот модуль просто переводится. Точку перевода нужно вставить в механизм подстановки параметров. При этом, подставляемый кусок должен помечаться меткой начала и конца, чтобы обрезать заголовок модуля, полученный из шаблона. Либо, ещё проще, допускать только шаблонные модули.
  • любые другие шаблоны можно тоже пытаться запихать в модуль и извлекать их оттуда по ключу, допустим, "дай тело процедуры Max из псевдо-модуль Математика.шм"
  • синтезировать текст не с нуля, а из символов, например:

    Код: Выделить всё

    (* а - переменная, аргумент шаблона *)
    БСП(КС("если"),а,КС("суть"),Символ("Commans.Context"),...)
    
А в процедуры КС и Символ вставить обращение к движку перевода, чтобы во время компиляции брался нужный перевод. Ведь в CallThis уже сделано так.

Ответить