如何解析 Elisp 中的代码块?

How to parse code blocks in Elisp?

highlight-blocks-mode 非常好,但它只高亮基于括号匹配的块。我也想添加对语义块的支持。 例如,将 casetry / catchlambda 和其他表达式视为块并突出显示其中的代码。

我读过语法表,但它们似乎只适用于语法,无法帮助我解决问题。

Elisp 中有什么东西可以用来完成这个任务吗?

有一个官方语言模式(我现在想要这个用于 Erlang),它有关键字列表,但我认为它只用于缩进和突出显示。

Emacs 的主要模式通常不包括它们支持的语言的完整解析器。出于缩进的目的,他们确实需要执行一些解析,但通常只以部分和表面的方式完成。

基于SMIE的Major modes在这方面往往会好一些,因为SMIE采取的方法是将压头的任务明确划分为一侧解析,另一侧缩进规则,因此解析侧通常更多完整和彻底。这就是说,它仍然通常是不完整的或近似的。

因此对于基于 SMIE 的主要模式,您可以使用 smie-backard-sexpsmie-forward-sexp 来查找封闭的 "semantic blocks"。