Emacs是否有BNF模式?

Emacs是否有BNF模式?,emacs,bnf,Emacs,Bnf,我必须编辑大量.bnf格式的语法文件。Emacs中是否有此模式 我看过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)) 语义bnf模式用于它自

我必须编辑大量.bnf格式的语法文件。Emacs中是否有此模式

我看过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))

语义bnf模式用于它自己的内部解析器格式。最初的“bnf”是一个双关语,最终让人困惑

现有的语义模式如wisent语法模式和Boven语法模式是针对CEDET使用的语法,而原始的bnf模式是相似的,并不代表真正的bnf风格语法

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

为了更具可读性和可查找性,jmmcd用以下内容回答了自己的问题。您可以在emacs帮助>elisp>23.2.6通用模式中找到更多信息


“我把它放在了.emacs中,它似乎起了作用。”

(定义通用模式“bnf模式
'("#") 
无
“(“^”。”字体锁定变量名面)
(“.”字体锁定关键字面)
(“:=””字体锁定警告面)
(“\\\””字体锁定警告面)
“(\\.bnf\\.pybnf\\”)
无
“BNF突出显示的主要模式。”)

谢谢你,唐。我稍微改进了代码,这是一个新版本

(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.")
(定义通用模式“bnf模式
();注释字符:不适用,因为#必须在行的开头
零;关键词
'(
(“^#....”字体锁定注释面);行开头的注释
(“^”。”字体锁定函数名称面);;LHS非终结符
(“.”字体锁定内置面);其他非终端
(“:=”'字体锁定常量面);;;“转到”符号
(“\\\”“字体锁定警告面”);“或”符号
(“\{:\\\\\;:\}.”字体锁定关键字面);;特殊pybnf分隔符
)
“(\\.bnf\\”\\.pybnf\\”);文件名后缀
零;附加函数挂钩
“BNF突出显示的主要模式。”)
我刚刚创建了一个

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


谢谢Eric澄清了这一点。我决定尝试实现一个非常简单的模式,只是为了突出显示语法。我把它放在我的.emacs中,它似乎起作用了。(定义通用模式'bnf mode'(“#”)nil'(“^”。'font lock variable name face)(“.”font lock keyword face)(“::=”。'font lock warning face)(“\\\”。'font lock warning face”)(“\\.bnf\\\.pybnf\\”)(“\\\.bnf\\\\”用于bnf高亮显示的主要模式。)非常喜欢,谢谢!对它进行了一些调整,以符合我编写EBNF的个人偏好,但这是一个惊人的开始;节省了我几个小时:)
(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.")