我必须编辑.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))
答案 0 :(得分: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.")
答案 1 :(得分:8)
语义bnf模式用于其自己的内部解析器格式。最初的'bnf'这个名字是一个双关语,最终使人们感到困惑。
现有的语义模式,如明智语法模式和牛语法模式,是针对CEDET使用的语法,原始的bnf模式是相似的,并不代表真正的BNF风格语法。
你可能对ebnf2ps更感兴趣,它将ebnf语法(yacc等)翻译成语法图表,虽然我自己没有使用它。
答案 2 :(得分:5)
为了更具可读性和可回答性,jmmcd用以下方式回答了他自己的问题。您可以在emacs帮助中找到更多信息&gt; elisp&gt; 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.")
答案 3 :(得分:0)