Обычные атрибуты Erlang могут быть изменены с помощью преобразований разбора.Это не относится к атрибутам "-define", так как они обрабатываются препроцессором.Что бы вы сделали, если бы вы хотели изменить значение всех макросов без изменения самого файла?
В идеале я хочу вызвать некоторую измененную версию компилятора, которая будет иметь следующий эффект:
При запуске с вводом ...
...
-define(constant, 45).
-define(debug(X), io:format(X)).
...
?debug(?constant) % Line: 7
...
.. и параметром ...
something:external
результатом будет некоторая абстрактная форма, которая вместо ...
{call,7,
{remote,7,{atom,7,io},{atom,7,format}},
[{integer,7,45}]}
... будет иметь:
{call,7,
{remote,7,{atom,7,something},{atom,7,external}},
[{call,7,
{remote,7,{atom,7,something},{atom,7,external}},
[]}]}
Конечно, результирующий код, вероятно, не будет исполняемым, но может обеспечить некоторый «качественный» анализ использования макросов.