июля 24, 2010

dpp: персморт концепции

Изначально я предполагал, что моя утилитка dpp для препроцессинга сурсов на паскале будет строчно-ориентирована. Т.е. ключевые строки программы (объявление класса, функции, слова «interface» и «implementation») должны были бы занимать одну строку, а dpp может только дописывать в конец некоторым строкам какой-то код.

Объяснял я это тем, что от этого будет проще жить. Однако, напротив, начался адский кошмар и говнокод.

Поэтому я принял решение полностью отказаться от концепции строчно-ориентированности, ввёл новый синтаксис для dpp-макросов и начал с нуля.

А именно, код для dpp должен находится внутри блока #(…). Например, уже реализована конструкция

#(return A)

Которую dpp заменяет на

begin Result := A; Exit end

Хотя только что мне пришла в голову идея реализовать конструкцию с возможностью вставки нескольких операторов, т.е.

#(return A1 A2 … AN)

развернётся в

begin A1; A2; … A(N-1); Result := AN; Exit end

Теперь у меня серьезные проблемы с тем, что некоторые команды должны не только генерировать код прям на месте, но и добавлять какой-то код в другие части проекта. (К примеру, лямбда-функции должны добавлять свой код в implementation-секции модуля.) А это без предположения о строчном разбиении задача не минутная.

Но нет худа без добра, и возможно, что будет возможность писать макросы на лиспе, командой #(lisp …).


Комментариев нет:

Отправить комментарий

Постоянные читатели

Обо мне

Моя фотография
Мой e-mail: vitek_03(at)mail(dot)ru