2009-11-25 12 views
5

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

私はCEDETのセマンティックパッケージを見てきましたが、これはbnfモードを使用していたようですが、それ以上はありません。このスニペットはgooglableですが、セマンティック・BNFモードが存在していないようです:

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

答えて

7

セマンティックBNFモードは、独自の内部パーサ形式のためでした。オリジナルの「bnf」という名前は、混乱した人々に終わった言葉遣いでした。

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

ebnf2psに興味がありますが、これはebnf文法(yaccなど)を構文図に変換しますが、私はそれを自分で使っていません。

+1

ありがとうございました。構文の強調表示のためだけに、本当にシンプルなモードを実装しようと決めました。私はこれを私の.emacsに入れて、うまくいくように思えます。 (定義汎用モード 'をBNFモード '( "#") ゼロ '(( "^ <.*?>"。' フォント・ロック・変数名・顔)\t ( "<.*?>"。「フォント(「\\。bck()」)。 ( ":: ="。フォントロック警告面) ( "\ |"フォントロック警告面) ' \\。pybnf \\ '") nil " BNFハイライトの主要モード " – jmmcd

3

答えとして読みやすく、見つけやすいように、jmmcdは自分の質問に次のように答えました。 Emacsのヘルプ> elisp> 23.2.6汎用モードで詳細を見つけることができます。


「私は私の.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.") 
8

ありがとうございます。コードを少し改善しました。ここに新しいバージョンがあります。

(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.") 
関連する問題