I do a lot of writing and editing of context-free grammars in BNF format, eg for my work on Grammatical Evolution (examples here and here).
I was amazed to find that there’s no Emacs mode for editing BNF. Here’s a small contribution which does some syntax highlighting. It also lives at EmacsWiki.
(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-warning-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.")
Paste it into your .emacs
file and execute it with C-x C-e
. When
you edit a .bnf
file, it will automatically go into BNF-mode.