8

我必须编辑大量 .bnf 格式的语法文件。Emacs 中有这种模式吗?

我查看了 CEDET 的语义包,似乎它曾经有一个 bnf 模式,但现在没有了。这个片段是可谷歌搜索的,但语义-bnf-mode 似乎不存在:

(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 风格语法。

您可能对 ebnf2ps 更感兴趣,它将 ebnf 语法(yacc 等)翻译成语法图表,尽管我自己没有使用过。

于 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 回答
1

我刚刚创建了一个用于编辑 BNF 语法的 GNU Emacs 主模式

目前为 BNF 文件提供基本语法和字体锁定。EBNF 和 ABNF 在我近期的计划中。

在此处输入图像描述

于 2019-03-15T23:55:52.873 回答