2009-11-25 13 views
5

मुझे .bnf प्रारूप में बहुत सारी व्याकरण फ़ाइलों को संपादित करना होगा। क्या Emacs में इसके लिए कोई तरीका है?क्या Emacs के लिए कोई बीएनएफ मोड है?

मैंने सीईडीईटी के अर्थपूर्ण पैकेज को देखा है, और ऐसा लगता है कि इसका उपयोग बीएनएफ-मोड होना था, लेकिन अब और नहीं। यह टुकड़ा 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 मोड अपने स्वयं के आंतरिक पार्सर प्रारूप के लिए किया गया था। मूल 'बीएनएफ' नाम एक पन था जो भ्रमित लोगों को समाप्त कर देता था।

मौजूदा अर्थपूर्ण मोड जैसे बुद्धिमान-व्याकरण मोड और बोवाइन-व्याकरण-मोड सीईडीईटी द्वारा उपयोग किए गए व्याकरण के लिए हैं, और मूल बीएनएफ-मोड समान था, और वास्तविक बीएनएफ शैली व्याकरण का प्रतिनिधित्व नहीं किया।

आप शायद ebnf2ps में अधिक रुचि रखते हैं, जो सिंटैक्स चार्ट में ebnf व्याकरण (yacc, आदि) का अनुवाद करता है, हालांकि मैंने इसे स्वयं नहीं उपयोग किया है।

+1

धन्यवाद एरिक इसे साफ़ करने के लिए। मैंने सिंटैक्स हाइलाइटिंग के लिए, वास्तव में एक सरल मोड को लागू करने का प्रयास करने का निर्णय लिया। मैंने इसे अपने .emacs में रखा और ऐसा लगता है कि यह काम करता है। (परिभाषित-सामान्य मोड 'BNF मोड ' ("#") शून्य '(("^ <.*?>"।' Font-लॉक-चर-नाम वाली चेहरा) \t ("<.*?>"। 'फॉन्ट -लॉक-कीवर्ड-फेस) (":: ="। 'फ़ॉन्ट-लॉक-चेतावनी-चेहरा) ("\ |"।' फ़ॉन्ट-लॉक-चेतावनी-चेहरा) ) '("\\। bnf \\। pybnf \\ '") शून्य " बीएनएफ हाइलाइटिंग के लिए प्रमुख मोड। ") – jmmcd

3

उत्तर के रूप में अधिक पठनीय और खोजने योग्य होने के लिए, 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.") 
8

धन्यवाद डॉन। मैंने कोड को बहुत थोड़ा सुधार दिया, यहां एक नया संस्करण है।

(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.") 
संबंधित मुद्दे