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 "*")))))))

Несколько моментов, на которые следует обратить внимание: