Я пишу программу, которая открывает файл lisp, вызывает «чтение» в потоке до тех пор, пока поток не станет пустым, и работает со списками, которые он собирает.
Это работало довольно хорошо, пока я не обнаружил, что «read» выполнит поиск пакета, например, если он встретит some-package:foo
, он будет жаловаться, что Package SOME-PACKAGE does not exist.
Вот пример, показывающий, что я имею в виду:
(read (make-string-input-stream "(list 'foo :foo some-package:foo)"))
Так что теперь мне бы хотелось одну из трех вещей:
- Сделайте так, чтобы "read" игнорировал пространства имен пакетов, чтобы я мог преобразовывать произвольные исходные файлы в списки символов.
- Используйте некоторую другую библиотеку синтаксического анализа с похожим поведением для «чтения», но она получает только простые символы, либо искажая
:
, либо игнорируя двоеточие и все, что перед ним.
- Предварительная обработка файла и использование регулярных выражений или чего-либо подобного для упаковки поисков и замены их простыми именами, такими как преобразование "some-package: foo" в просто "foo"
Цель всего этого в первую очередь состояла в том, чтобы создать граф зависимостей вызова функции. Я знаю, что существуют вещи такого рода гораздо более высокого качества, но я хотел сделать это самому для развлечения / обучения. Однако я столкнулся с этой проблемой и не знаю, как действовать дальше.