Я пишу программу, которая открывает файл lisp, вызывает «чтение» в потоке до тех пор, пока поток не станет пустым, и выполняет действия со списками, которые он собирает.
Это работало довольно хорошо, пока я не обнаружил, что «чтение» будет выполнять поиск пакетов, например, если он встретит some-package:foo
, он будет жаловаться, что Package SOME-PACKAGE does not exist.
Вот пример, показывающий, что я имею в виду:
(read (make-string-input-stream "(list 'foo :foo some-package:foo)"))
Так что теперь я хотел бы одну из трех вещей:
- Сделайте так, чтобы «чтение» игнорировало пространства имен пакетов, чтобы я мог преобразовывать произвольные исходные файлы в списки символов.
- Используйте другую библиотеку синтаксического анализа с аналогичным поведением для «чтения», но которая получает только простые символы, либо искажая
:
, либо игнорируя двоеточие и все, что предшествует ему. - Предварительная обработка файла и использование регулярного выражения или подобного для поиска пакетов и замены их простыми именами, например, преобразование «some-package: foo» в просто «foo»
Целью всего этого в первую очередь было сделать граф зависимостей вызовов функций. Я знаю, что существуют вещи такого рода гораздо более высокого качества, но я хотел сделать это сам для развлечения/обучения. Однако я столкнулся с этой проблемой и не знаю, как действовать дальше.
"some-package:foo"
на"some-package-foo"
, не так ли? Однако тогда появится ошибка, если есть часть программы после(in-package some-package)
... - person Gwang-Jin Kim   schedule 03.11.2018read
, объясняется здесь cs .cmu.edu/Groups/AI/html/cltl/clm/node188.html - person Gwang-Jin Kim   schedule 03.11.2018