Emacs是否有BNF模式?
我必须编辑大量.bnf格式的语法文件。Emacs中是否有此模式 我看过CEDET的语义包,它似乎曾经有一个bnf模式,但现在没有了。此代码段是googlable,但语义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模式用于它自
(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.")