在缩进等语法分析场景中,通常需要计算缓冲区指定位置对应的语法状态。该函数可便捷地完成这一操作。
该函数返回解析器从缓冲区可见区域开头开始,到位置 pos 处时所达到的解析状态。 See 解析状态, 查看解析状态的说明。
返回值与直接调用底层解析函数 parse-partial-sexp 从缓冲区可见区域开头解析到 pos 的结果一致(see 底层解析)。
不过,syntax-ppss 会使用缓存加速计算。受该优化影响,返回解析状态中的第二个值(上一个完整子表达式)和第六个值(最小括号深度)无实际意义。
该函数有一个副作用:它会向缓冲区局部的 before-change-functions(see 变更钩子)添加一个用于 syntax-ppss-flush-cache(见下文)的条目。
该条目可在缓冲区被修改时保持缓存一致。但如果在 before-change-functions 被临时绑定、或缓冲区在未运行钩子的情况下被修改(例如使用 inhibit-modification-hooks)时调用 syntax-ppss,缓存可能不会更新。
这类情况下需要显式调用 syntax-ppss-flush-cache。