36.6 表达式解析

本节介绍用于解析与扫描平衡表达式的函数。 沿用 Lisp 术语,我们将这类表达式称为sexp(符号表达式),尽管这些函数也可用于 Lisp 以外的语言。 简单来说,sexp 可以是一对平衡的括号结构、一个字符串,或一个符号(即由词构成字符或符号构成字符组成的序列)。 不过,紧邻表达式的表达式前缀语法分类字符(see 语法类别表)会被视为表达式的一部分。

语法表控制字符的解释方式,因此这些函数在 Lisp 模式下可处理 Lisp 表达式,在 C 模式下可处理 C 表达式。 See 移动遍历平衡表达式,查看用于在平衡表达式间移动的更便捷高层函数。

字符的语法控制解析器状态的切换方式,而非直接描述状态本身。 例如,字符串定界符会在“字符串内”与“代码内”状态间切换,但字符语法本身并不直接表明其是否位于字符串中。 例如(注意 15 是通用字符串定界符的语法代码):

(put-text-property 1 9 'syntax-table '(15 . nil))

这段代码并不会告诉 Emacs 当前缓冲区前 8 个字符是一个字符串,而是将它们全部标记为字符串定界符。 结果是 Emacs 会将其视为四个连续的空字符串常量。