list - 使用 "read"解析字符串并忽略包 namespace

标签 list parsing lisp common-lisp s-expression

我正在编写一个程序,它打开一个 lisp 文件,在流上调用“读取”直到流为空,然后对它收集的列表进行操作。

在我发现“读取”将执行包查找之前,它工作得非常好,例如,如果它遇到 some-package:foo 它会提示 Package SOME-PACKAGE 不存在。

下面是一个例子来说明我的意思:

(read (make-string-input-stream "(list 'foo :foo some-package:foo)"))

所以我现在想要三件事中的一件:

  1. 让它“读取”将忽略包命名空间,这样我就可以将任意源文件转换为符号列表。
  2. 使用一些其他具有类似“读取”行为的解析库,但只能获取纯符号,方法是破坏 : 或忽略冒号及其之前的所有内容。
  3. 预处理文件并使用正则表达式等来打包查找并用普通名称替换它们,例如将“some-package:foo”转换为简单的“foo”

所有这一切的目的首先是制作一个函数调用依赖图。我知道存在质量更高的那种性质的东西,但我想自己做它来娱乐/学习。但是,我遇到了这个问题,不知道如何继续。

最佳答案

对于您的用例,您可以通过创建所需的包并重新启动来处理包错误情况。这也将保留符号身份。请注意,当您遇到 in-package 表单时,您需要对其进行处理。

关于list - 使用 "read"解析字符串并忽略包 namespace ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53127961/

相关文章:

python - 将列表元素与字符串进行比较

python - 如何在不使用任何 for 或 while 循环的情况下将列表列表打印到 python 中的一个列表中?

c++ - 使用 POCO JSON 进行增量解析

compiler-errors - Lisp 非法函数调用,

recursion - 普通口齿不清 : error "CDR LST should be a lambda expression"

java - 使用 Java nio files walk() 读取文件

list - 递归处理列表和列表的子列表给出类型不匹配

delphi - 使用TWebBrowser用Delphi填充网页

javascript - 将 JSON 服务器文件解析为 HTML 列表

recursion - 优化骑士之旅 LISP