假设我有以下代码:
(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在某些情况下,我需要停止对“后缀”,而在另一些情况下,我需要继续,后缀本身没有其他意义,只是一个指示的行动,分析器应该采取下一步。
发布于 2012-10-19 14:22:38
没有标准的功能去做它。你也许可以用read-from-string来强制一些东西,但是无论你做什么,它都需要额外的工作。
发布于 2012-10-19 14:44:21
从流中读取解析,而不是字符串。S-表达式可以任意长。read应该保留已经读过的内容的字符串吗?
您可能需要的是一个特殊的流。在标准的Common中,没有用户定义流的机制。但是在现实生活中,每个实现都有这样的可扩展流。例如,参见“灰色流”。
http://www.sbcl.org/1.0/manual/Gray-Streams.html
https://stackoverflow.com/questions/12974898
复制相似问题