如何解析Elisp中的代码块?

时间:2015-11-23 11:29:44

标签: parsing emacs syntax erlang elisp

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

我已经了解了语法表,但它们似乎只能用于语法,并且无法解决我的问题。

Elisp中有什么东西可用于此任务吗?

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

1 个答案:

答案 0 :(得分:4)

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

基于SMIE的主要模式往往在这方面稍微好一些,因为SMIE采用的方法是将压头的任务明确划分为一方解析而另一方面压缩规则,因此解析方面是通常更完整和彻底。这说,它通常仍然是不完整或近似的。

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