Emacs 如何在SMIE中定义多字符括号

Emacs 如何在SMIE中定义多字符括号,emacs,indentation,parentheses,auto-indent,smie,Emacs,Indentation,Parentheses,Auto Indent,Smie,我复制了GNU手册中关于SMIE的代码。begin和end的缩进工作正常 (defvar sample-smie-grammar (smie-prec2->grammar (smie-bnf->prec2 '((id) (inst ("begin" insts "end") ("if" exp "then" inst "else" inst) (id ":=" exp) (exp))

我复制了GNU手册中关于SMIE的代码。
begin
end
的缩进工作正常

(defvar sample-smie-grammar
  (smie-prec2->grammar
   (smie-bnf->prec2
    '((id)
      (inst ("begin" insts "end")
            ("if" exp "then" inst "else" inst)
            (id ":=" exp)
            (exp))
      (insts (insts ";" insts) (inst))
      (exp (exp "+" exp)
           (exp "*" exp)
           ("(" exps ")"))
      (exps (exps "," exps) (exp)))
    '((assoc ";"))
    '((assoc ","))
    '((assoc "+") (assoc "*")))))
但是,当我尝试添加
class
/
endclass
module
/
endmodule
,如下所示时,新添加的对根本不缩进。当我启用
显示参数模式时
。它们不会突出显示为
开始
结束
的状态

(defvar sample-smie-grammar
  (smie-prec2->grammar
   (smie-bnf->prec2
    '((id)
      (inst ("begin" insts "end")
            ("module" insts "endmodule")
            ("class" insts "endclass")
            ("if" exp "then" inst "else" inst)
            (id ":=" exp)
            (exp))
      (insts (insts ";" insts) (inst))
      (exp (exp "+" exp)
           (exp "*" exp)
           ("(" exps ")"))
      (exps (exps "," exps) (exp)))
    '((assoc ";"))
    '((assoc ","))
    '((assoc "+") (assoc "*")))))

“不起作用”是一个无用的行为描述。对不起,我的英语不好。加上一些词,试着弄清楚。问题可能在于方法论。所以请详细地告诉我们你是如何尝试的:你按了哪些键,按了什么顺序。