当前位置:  开发笔记 > 编程语言 > 正文

Emacs有BNF模式吗?

如何解决《Emacs有BNF模式吗?》经验,为你挑选了3个好方法。

我必须编辑.bnf格式的许多语法文件.在Emacs中有这种模式吗?

我已经看过CEDET的语义包了,似乎它用于拥有bnf模式,但不再是.这个片段是googlable,但是semantic-bnf-mode似乎不存在:

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

jmmcd.. 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.")


Eric.. 8

语义bnf模式用于其自己的内部解析器格式.最初的'bnf'这个名字是一个双关语,最终让人感到困惑.

现有的语义模式,如明智语法模式和牛语法模式,是针对CEDET使用的语法,原始的bnf模式是相似的,并不代表真正的BNF风格语法.

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



1> jmmcd..:

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

(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.")



2> Eric..:

语义bnf模式用于其自己的内部解析器格式.最初的'bnf'这个名字是一个双关语,最终让人感到困惑.

现有的语义模式,如明智语法模式和牛语法模式,是针对CEDET使用的语法,原始的bnf模式是相似的,并不代表真正的BNF风格语法.

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


谢谢Eric清理它.我决定尝试实现一个非常简单的模式,仅用于语法高亮.我把它放在我的.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"BNF突出显示的主要模式.")

3> Don..:

为了更具可读性和可回答性,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.")

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有