Parsing 如何解析Elisp中的代码块?

Parsing 如何解析Elisp中的代码块?,parsing,emacs,syntax,erlang,elisp,Parsing,Emacs,Syntax,Erlang,Elisp,有高亮块模式,这是非常好的,但它只高亮基于帕伦斯匹配的块。我还想添加对语义块的支持。 例如,将case、try/catch、lambda和其他表达式视为块,并突出显示其中的代码 我读过关于语法表的书,但它们似乎只适用于语法,不能帮助我解决问题 Elisp中是否有我可以用于此任务的内容 有一个官方的语言模式(我现在想要Erlang),它有一个关键字列表,但我认为它只用于缩进和高亮显示。Emacs的主要模式通常不包括它们支持的语言的完整解析器。出于缩进的目的,他们确实需要执行一些语法分析,但通常只是

有高亮块模式,这是非常好的,但它只高亮基于帕伦斯匹配的块。我还想添加对语义块的支持。 例如,将
case
try/catch
lambda
和其他表达式视为块,并突出显示其中的代码

我读过关于语法表的书,但它们似乎只适用于语法,不能帮助我解决问题

Elisp中是否有我可以用于此任务的内容


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

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

基于SMIE的主要模式在这方面表现得更好一些,因为SMIE采用的方法是将压头的任务清楚地划分为一侧的解析和另一侧的缩进规则,因此解析侧通常更完整和彻底。也就是说,它通常仍然是不完整或近似的


因此,对于基于SMIE的主要模式,您可以使用
SMIE backard sexp
SMIE forward sexp
查找包含的“语义块”

一个简单的、模式无关的解决方案是根据压痕深度高亮显示块。