如何获取导致解析错误的字符串?

时间:2012-10-19 13:04:35

标签: parsing error-handling lisp common-lisp

假设我有这段代码:

(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

在某些情况下,我需要停在“后缀”上,而在其他情况下,我需要继续,后缀本身没有其他含义,只是作为解析器接下来应采取的操作的指示。

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

没有标准功能。您可以使用read-from-string来强制执行某些操作,但无论您做什么,都需要一些额外的工作。