2009-11-25 2 views
5

많은 .bnf 형식의 문법 파일을 편집해야합니다. Emacs에서이 모드가 있습니까?Emacs 용 BNF 모드가 있습니까?

저는 CEDET의 의미 패키지를 살펴 봤는데 bnf-mode를 사용했지만 더 이상 사용하지 않는 것으로 보입니다. 이 조각은 googlable이지만, 의미-BNF 모드가 존재하지 않는 것 :

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

답변

7

시맨틱 BNF 모드가 자체 내장 파서 형식이었다. 원래 'bnf'라는 이름은 사람들이 혼란스러워하는 말장난이었습니다. 같은 wisent - 문법 모드와 소 - 문법 모드로

기존의 시맨틱 모드는 CEDET에서 사용하는 문법에 대한, 그리고 원래의 BNF 모드는 유사하고, 실제 BNF 스타일의 문법을 나타내지 않았다.

ebnf2ps에 관심이 있습니다. ebnf 문법 (yacc 등)을 구문 차트로 변환하지만, 직접 사용하지는 않았습니다.

+1

감사합니다. 구문 강조를 위해 정말 간단한 모드를 구현하기로 결정했습니다. 저는 이것을 .emacs에 넣었습니다. (정의 - 일반 모드 '를 BNF 모드 '("#") 닐 '(("^ <.*?>'. '폰트 로크 변수 이름 얼굴) \t ("<.*?>'. '폰트 (":: =". = "."글꼴 잠금 경고 얼굴) ("\ |". 글꼴 잠금 경고 얼굴) ) '("\\. bnf \\. pybnf \\ ' ") nil "BNF 강조 표시의 주 모드 " – jmmcd

3

답변으로 더 읽기 쉽고 찾기 쉽도록 jmmcd는 자신의 질문에 다음과 같이 대답했습니다. 이맥스 도움말> elisp> 23.2.6 일반 모드에서 더 많은 것을 찾을 수 있습니다.


는 "나는 내 이맥스에 넣고 그것을 작동하는 것 같다."

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

감사합니다. Don. 코드를 약간 개선했는데 여기에 새 버전이 있습니다.

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