GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/SMIE-Grammar.html ・ emacs-doc.conao3.com

24.8.1.3 言語の文法の定義

言語のSMIE文法を定義する一般的な方法は、BNFルールの集合を与えることで、優先順位表を保持する新しいグローバル変数を定義することです。例えば、小規模なPascal系言語の文法定義は、次のような形式になります。

(require 'smie)
(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 "*")))))

いくつか注意点があります: