明確なSMIEドキュメントはありますか?


18

あらゆる種類のSMIEインデントルール/文法/何かを機能させるために、今では何時間も費やしています。

それが実際にどのように機能するかについてのドキュメント付きの小さな、おもちゃまたはスケルトンSMIEベースのモードの例、またはそれを使用する方法についての議論はどこにありますか?たとえば、式をセミコロンで終わるトークンの文字列として定義し、ブロックを角かっこ以外の式として定義します。本当に、本当に簡単ですか?

特定の質問:smie-config-show-indentを使用すると、90%の時間で ':list-intro ""-> nil'という応答が返されます。式または式のリストの定義に基づいたリストイントロとは何ですか?なぜnilと言っても、次の行をインデントするのですか?どうすれば変更できますか?

第二に:私の文法と私のスミルールの間に何か関係はありますか?それらは両方ともsmie-setupに渡されるためだと思いますが、たとえば、ブロックを識別する文法に基づいて、「 'block'が表示されたら、内容をインデント」と言う方法が見つかりません。 。

第三に、SMIEには多くのルールが「組み込まれている」ようです。開始するだけで、ブラケット、ブレース、括弧などの一般的な処理が可能になります。これらのルールを確認または変更する方法はありますか?それとも、構文テーブルがこれをすべて行っており、SMIEが文字通りまったく何もしていないということです(私は疑い始めています)。

最後に、SMIEをデバッグしようとすると、「編集、評価モードバッファー、他のバッファーのサンプルコードに移動、MX <my mode>、テスト」サイクルを実行しようとしますが、各回でルールがクリアされないようです前のサイクル。define-derived-modeがクリーンシートから開始されることをどのようにして確認できますか?私はそこに(kill-all-local-variables)を持っていますが、それは十分ではないと思われ、emacsを閉じる必要があります。

ハイライト(font-lock-defaultsを使用しているため、実際にはSMIEでさえない)を除いて、漠然と動作するものすら何もないので、私が持っているものの例を投稿していません。本当の赤ちゃんのステップが必要です。


1
SMIE作成者にドキュメントを要求してみてください?
ドリュー

4
@drew彼はドキュメンタリーが上手ではないと公に述べている(そして彼のドキュメンテーションを読んだからといって議論できない)ので、無意味だ。
ナゴラ

1
はい、知っています。彼は、コードはdocで十分であるとさえ言っています。ああ、提案の後に「;-)」を付けるのを忘れましたか?;
ドリュー

1
私はしばらく前にこれを見て、それlisp/progmodes/sh-script.elsmie.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)
  ...
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.