Чи є якась документація SMIE, яка зрозуміла?


18

Зараз я витратив багато-багато годин, намагаючись змусити працювати будь-яке правило відступів SMEM / граматики / речі.

Чи є приклади невеликого режиму роботи на основі SMIE на основі іграшки або скелета з документацією про те, як він насправді працює, або будь-яка дискусія про те, як ним користуватися? Щось, що, скажімо, визначає вираз як рядок лексем, що закінчуються напівкрапкою та блоком, як деякі вирази між дужками та більше нічого. Дійсно, справді просто?

Конкретні питання: при використанні smie-config-show-indent 90% часу я отримую відповідь ': list-intro "" -> nil'. На чому введення списку засноване на його визначенні виразу чи списку виразів? Чому він говорить про нуль і досі відступає наступні рядки? Як це змінити?

По-друге: чи є зв’язок між моєю граматикою та моїми правилами smie? Я припускаю, що це відбувається тому, що вони обоє передаються в програму smie-setup, але я не можу знайти жодного способу сказати: "коли ви бачите" блок ", відступайте вміст", наприклад, на основі граматики, яка ідентифікує блок .

По-третє, SMIE, здається, має безліч правил, "запечених". Наприклад, лише натискання на нього дає загальне поводження з дужками, дужками і дужками. Чи є спосіб бачити ці правила чи змінювати їх? Або це так, що синтаксична таблиця робить все це, і SMIE буквально нічого не робить (про що я починаю підозрювати).

Нарешті, при спробі налагодження SMIE я намагаюся зробити "редагувати, буфер режиму eval, перейти до прикладу коду в іншому буфері, MX <мій режим>, тестувати" цикл, але здається, що кожна поїздка навколо не очищає правила від попередній цикл. Як я можу бути впевнений, що режим визначення визначеного походження починається з чистого аркуша? У мене є (kill-all-local-variables), але це, здається, недостатньо, і я закінчую, щоб закрити emacs.

Я не публікую жодних прикладів того, що у мене є, тому що я не маю нічого, що навіть розпливчато працює, окрім виділення (використовуючи шрифт-замок за замовчуванням, тому я навіть не дуже SMIE, я думаю). Мені потрібні справжні дитячі кроки.


1
Спробуйте запитати у автора SMIE документацію?
Дрю

4
@drew Він публічно заявив, що він не хороший документаліст (і прочитавши його документацію, я не можу стверджувати), тому це здається безглуздим.
Нагора

1
Так, я знаю. Він навіть сказав, що код повинен бути достатнім як doc. О, я забув поставити " ;-) " після своєї пропозиції? ;-)
Дрю

1
Я деякий час поглянув на це і помітив, що, lisp/progmodes/sh-script.elздається, використовується smie.elдосить широко. Вони також здаються документувати їх використання так, можливо, це може бути дещо кращим прикладом?
Xaldew

2
Режим SML і режим Modula2 використовують SMIE. IIRC SMIE був вилучений з режиму SML спочатку. Треба визнати, мені це було особливо важко.
окудо

Відповіді:



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)
  ...
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.