如何解析 Elisp 中的代码块?
How to parse code blocks in Elisp?
highlight-blocks-mode 非常好,但它只高亮基于括号匹配的块。我也想添加对语义块的支持。
例如,将 case
、try / catch
、lambda
和其他表达式视为块并突出显示其中的代码。
我读过语法表,但它们似乎只适用于语法,无法帮助我解决问题。
Elisp 中有什么东西可以用来完成这个任务吗?
有一个官方语言模式(我现在想要这个用于 Erlang),它有关键字列表,但我认为它只用于缩进和突出显示。
Emacs 的主要模式通常不包括它们支持的语言的完整解析器。出于缩进的目的,他们确实需要执行一些解析,但通常只以部分和表面的方式完成。
基于SMIE的Major modes在这方面往往会好一些,因为SMIE采取的方法是将压头的任务明确划分为一侧解析,另一侧缩进规则,因此解析侧通常更多完整和彻底。这就是说,它仍然通常是不完整的或近似的。
因此对于基于 SMIE 的主要模式,您可以使用 smie-backard-sexp
和 smie-forward-sexp
来查找封闭的 "semantic blocks"。
highlight-blocks-mode 非常好,但它只高亮基于括号匹配的块。我也想添加对语义块的支持。
例如,将 case
、try / catch
、lambda
和其他表达式视为块并突出显示其中的代码。
我读过语法表,但它们似乎只适用于语法,无法帮助我解决问题。
Elisp 中有什么东西可以用来完成这个任务吗?
有一个官方语言模式(我现在想要这个用于 Erlang),它有关键字列表,但我认为它只用于缩进和突出显示。
Emacs 的主要模式通常不包括它们支持的语言的完整解析器。出于缩进的目的,他们确实需要执行一些解析,但通常只以部分和表面的方式完成。
基于SMIE的Major modes在这方面往往会好一些,因为SMIE采取的方法是将压头的任务明确划分为一侧解析,另一侧缩进规则,因此解析侧通常更多完整和彻底。这就是说,它仍然通常是不完整的或近似的。
因此对于基于 SMIE 的主要模式,您可以使用 smie-backard-sexp
和 smie-forward-sexp
来查找封闭的 "semantic blocks"。