是否有任何清晰的SMIE文档?


18

我花了很多小时来尝试使任何形式的SMIE缩进规则/语法/事物都起作用。

是否有基于SMIE的小型,玩具或骨架模式的示例,其中包含有关其实际工作方式的文档,或者有关如何使用它的任何讨论?就是说,将表达式定义为以分号结尾的令牌字符串,而将块定义为括号之间的某些表达式,仅此而已。真的,真的很简单吗?

具体问题:在使用smie-config-show-indent时,有90%的时间得到响应':list-intro“”-> nil'。基于列表的表达式或表达式列表的定义是什么?为什么说nil并仍然缩进以下几行?我该如何更改?

其次:我的语法和我的smie规则之间是否有任何关系?我想是因为它们都传递到了smie-setup中,但是我找不到任何方式说“例如,当您看到一个'block'时,缩进内容”,例如,基于识别一个block的语法。

第三,SMIE似乎有很多“扎根”的规则。只需将其启动即可对括号,大括号和括号等进行一般处理。有什么办法可以看到这些规则或对其进行修改?还是语法表正在执行所有这些操作,而SMIE实际上根本没有执行任何操作(我开始怀疑)。

最后,当尝试调试SMIE时,我尝试做一个“编辑,评估模式缓冲区,转到其他缓冲区中的示例代码,MX <我的模式>,测试”循环,但是似乎每次行程都无法清除规则前一个周期。我如何确定定义派生模式是从干净的表开始的?我在那里(kill-all-local-variables)在其中,但这似乎还不够,我最终不得不关闭emacs。

我没有发布任何示例,因为除了突出显示(使用font-lock-defaults之外,我什至无法隐约地工作),我猜它甚至都不是SMIE。我需要一些实际的步骤。


1
尝试向SMIE作者索取文档?
提请

4
@drew他公开表示自己不是一名优秀的文档撰写者(并且阅读了我的观点后我无法辩驳),因此这似乎毫无意义。
纳戈拉

1
是的我知道。他甚至说代码足以作为doc。哦,我忘了在建议后面加上“ ;-) ”吗?;-)
提请

1
我回头看了一下,发现它lisp/progmodes/sh-script.el似乎用途smie.el广泛。他们似乎也记录了对它的使用,因此也许这是一个更好的例子?
Xaldew

2
SML模式和Modula2模式都使用SMIE。IIRC SMIE最初是从SML模式中提取的。我必须承认,我也发现这特别困难。
ocodo

Answers:



1

您可以从类似

(defconst foo-smie-grammar
    (smie-prec2->grammar
     (smie-bnf->prec2
      '((exp ("begin" insts "end"))
        (insts (exp) (insts ";" insts))))))

  ...
  (smie-setup foo-smie-grammar #'ignore)
  ...
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.