8

.bnf 形式の多くの文法ファイルを編集する必要があります。Emacsにこれのためのモードはありますか?

CEDET のセマンティック パッケージを調べたところ、bnf モードが使用されていたようですが、それ以上は使用されていないようです。このスニペットはグーグル可能ですが、セマンティック-bnf-モードは存在しないようです:

(autoload 'semantic-bnf-mode "semantic-bnf" "Mode for Bovine Normal Form." t)
(add-to-list 'auto-mode-alist '("\\.bnf$" . semantic-bnf-mode))
4

4 に答える 4

12

ありがとうドン。コードをわずかに改善しました。これが新しいバージョンです。

(define-generic-mode 'bnf-mode
  () ;; comment char: inapplicable because # must be at start of line
  nil ;; keywords
  '(
    ("^#.*" . 'font-lock-comment-face) ;; comments at start of line
    ("^<.*?>" . 'font-lock-function-name-face) ;; LHS nonterminals
    ("<.*?>" . 'font-lock-builtin-face) ;; other nonterminals
    ("::=" . 'font-lock-const-face) ;; "goes-to" symbol
    ("\|" . 'font-lock-warning-face) ;; "OR" symbol
    ("\{:\\|:\}" . 'font-lock-keyword-face) ;; special pybnf delimiters
   )
  '("\\.bnf\\'" "\\.pybnf\\'") ;; filename suffixes
  nil ;; extra function hooks
  "Major mode for BNF highlighting.")
于 2009-11-26T14:39:26.100 に答える
8

Semantic bnf モードは、独自の内部パーサー形式用でした。元の「bnf」という名前は、人々を混乱させる駄洒落でした。

wisent-grammar-mode や bovine-grammar-mode などの既存のセマンティック モードは、CEDET で使用される文法用であり、元の bnf-mode は類似しており、実際の BNF スタイルの文法を表していませんでした。

おそらく、ebnf 文法 (yacc など) を構文図に変換する ebnf2ps の方に興味があるでしょうが、私自身は使用していません。

于 2009-11-25T22:26:45.730 に答える
5

回答をより読みやすく見つけやすくするために、jmmcd は自身の質問に次のように回答しました。詳細については、emacs ヘルプ > elisp > 23.2.6 Generic Modes を参照してください。


「これを .emacs に入れましたが、動作しているようです。」

(define-generic-mode 'bnf-mode 
  '("#") 
  nil 
  '(("^<.*?>" . 'font-lock-variable-name-face) 
    ("<.*?>" . 'font-lock-keyword-face) 
    ("::=" . 'font-lock-warning-face) 
    ("\|" . 'font-lock-warning-face))
  '("\\.bnf\\.pybnf\\'") 
  nil 
  "Major mode for BNF highlighting.")
于 2009-11-26T00:59:49.307 に答える