В Common Lisp reader расширяется пользователем с помощью макросов reader. читатель отвечает за чтение s-выражений . S-выражения - это внешний текстовый синтаксис для типов данных Lisp, таких как числа, строки, символы, списки, выражения, структуры, массивы, символы, ...
Читатель не несет ответственности за синтаксис языка программирования Lisp - только для s-выражений .
Таким образом, основная цель, с точки зрения пользователя, для макросов читателя состоит в расширенииили измените синтаксис s-выражений.Например, пользователь может добавить текстовый синтаксис для различных классов CLOS (например, URL, ...), хеш-таблиц, специальных идентификаторов, новых типов чисел, ...
Иногда он также используется для встраивания синтаксисадругие языки / синтаксис, которые имеют разные правила для формирования токенов: встроенный SQL, встроенный C, инфиксные выражения, встроенные вызовы Objective C, встроенные языки правил, встроенный XML, встроенный JSON и т. д.
Другое использование -позволяют пользователю иметь дополнительный контроль над s-выражениями, которые читает reader .Например, условные выражения признаков.
Таким образом, программируемые пользователем макросы считывателя позволяют пользователю настраивать считыватель с учетом вышеописанных функциональных возможностей.Можно предположить, что это полезно для тех пользователей, которые хотят настроить язык на уровне синтаксиса данных / токенов, но это добавляет еще один уровень сложности.