3

假设我有这个代码:

(handler-case (read ...)
  (parse-error (condition)
     (format t "What text was I reading last to get this error? ~s~&"
       (how-to-get-this-text? condition))))

我只能看到parse-namestring访问器,但它给出了错误消息,而不是它正在解析的文本。

编辑

在我的情况下,问题不那么普遍,因此不涉及无法解析的整个字符串的替代解决方案也很好。

想象一下我试图解析的这个示例代码:

prefix(perhaps (nested (symbolic)) expressions))suffix

在某些情况下,我需要停止“后缀”,而在其他情况下,我需要继续,后缀本身没有其他含义,只是作为解析器下一步应该采取的行动的指标。

4

2 回答 2

4

READ 从流中解析,而不是从字符串中解析。s 表达式可以任意长。READ 是否应该保留已读内容的字符串?

您可能需要一个特殊的流。在标准的 Common Lisp 中,没有用户定义流的机制。但在现实生活中,每个实现都有这样的可扩展流。参见例如“灰色流”。

http://www.sbcl.org/1.0/manual/Gray-Streams.html

于 2012-10-19T14:44:21.713 回答
3

没有标准功能可以做到这一点。你也许可以用 暴力破解某些东西read-from-string,但无论你做什么,都需要一些额外的工作。

于 2012-10-19T14:22:38.363 回答