Is there a BNF mode for Emacs?
bnf, emacs
Solution
Thanks Don. I improved the code very slightly, here's a new version.
(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.")
Problem
I have to edit lots of grammar files in .bnf format. Is there a mode for this in Emacs? I've looked at CEDET's semantic package, and it seems that it USED to have a bnf-mode, but not any more. This snippet is googlable, but semantic-bnf-mode doesn't seem to exist: ``` (autoload 'semantic-bnf-mode "semantic-bnf" "Mode for Bovine Normal Form." t) (add-to-list 'auto-mode-alist '("\\.bnf$" . semantic-bnf-mode)) ```