Существует ли режим BNF для Emacs?

Если Вы хотите наблюдать больше чем один элемент одновременно, можно добавить запятую и число элементов как так:

(v._Myfirst)[startIndex], count

Однако примечание, что количество должно быть константой, это не может быть результат другого выражения.

8
задан jmmcd 25 November 2009 в 21:50
поделиться

3 ответа

Thanks Don. I improved the code very slightly, here's a new version.

(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.")
12
ответ дан 5 December 2019 в 06:37
поделиться

Семантический режим BNF был для собственного внутреннего формата синтаксического анализатора. Первоначальное название «bnf» было каламбуром, который сбивал людей с толку.

Существующие семантические режимы, такие как wisent-grammar-mode и bovine-grammar-mode, предназначены для грамматик, используемых CEDET, а исходный bnf-mode был похожи и не представляют собой настоящую грамматику стиля BNF.

Вероятно, вас больше интересует ebnf2ps, который переводит грамматики ebnf (yacc и т. д.) в синтаксические диаграммы, хотя я сам не использовал его.

8
ответ дан 5 December 2019 в 06:37
поделиться

Чтобы быть более читаемым и доступным для поиска, jmmcd ответил на свой вопрос следующим образом. Вы можете найти больше в emacs Help> elisp> 23.2.6 Generic Modes.


«Я поместил это в свой .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.")
5
ответ дан 5 December 2019 в 06:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: