To install this package, run in Emacs:
M-x package-install RET bnf-mode RET
* BNF Mode for GNU Emacs [[https://www.gnu.org/licenses/gpl-3.0.txt][https://img.shields.io/badge/license-GPL_3-green.svg]] [[https://github.com/sergeyklay/bnf-mode/actions][https://github.com/sergeyklay/bnf-mode/workflows/build/badge.svg]] [[https://codecov.io/gh/sergeyklay/bnf-mode][https://codecov.io/gh/sergeyklay/bnf-mode/branch/master/graph/badge.svg]] [[https://melpa.org/#/bnf-mode][https://melpa.org/packages/bnf-mode-badge.svg]] [[https://stable.melpa.org/#/bnf-mode][https://stable.melpa.org/packages/bnf-mode-badge.svg]] A GNU Emacs major mode for editing BNF grammars. #+begin_quote “Precise language is not the problem. Clear language is the problem.” Richard Feynman #+end_quote Currently provides basic syntax and font-locking for BNF files. BNF notation is supported exactly form as it was first announced in the ALGOL 60 report. EBNF and ABNF are not supported but their implementation is planned in the near future. When developing this mode, the following documents were taken into account: - [[https://www.masswerk.at/algol60/report.htm][Revised Report on the Algorithmic Language Algol 60]] - [[https://tools.ietf.org/html/rfc822][RFC822]]: Standard for ARPA Internet Text Messages - [[https://tools.ietf.org/html/rfc5234][RFC5234]]: Augmented BNF for Syntax Specifications: ABNF - [[https://tools.ietf.org/html/rfc7405][RFC7405]]: Case-Sensitive String Support in ABNF ** Features - Basic syntax definition - Syntax highlighting ** Installation Known to work with GNU Emacs 24.3 and later. BNF Mode may work with older versions of Emacs, or with other flavors of Emacs (e.g. XEmacs) but this is /not/ guaranteed. Bug reports for problems related to using BNF Mode with older versions of Emacs will most like not be addressed. The master of all the material is the Git repository at https://github.com/sergeyklay/bnf-mode . NOTE: The ~master~ branch will always contain the latest unstable version. If you wish to check older versions or formal, tagged release, please switch to the relevant [[https://github.com/sergeyklay/bnf-mode/tags][tag]]. The recommended way is to use [[https://elpa.gnu.org/][ELPA]], [[https://stable.melpa.org/][MELPA Stable]] or [[https://melpa.org/][MELPA]]. If either is in your =package-archives=, do: #+begin_src M-x package-install RET bnf-mode RET #+end_src To learn on how to use any other installation methods refer to relevant documentation. ** Usage *** Interactive Commands | Command (For the ~M-x~ prompt.) | Description | |---------------------------------+----------------------------------| | ~bnf-mode~ | Switches to BNF Mode. | By default any file that matches the glob ~*.bnf~ is automatically opened in ~bnf-mode~. ** Customization To customize various options, use command as follows: #+begin_src M-x customize-group RET bnf RET #+end_src ** Support Feel free to ask question or make suggestions in our [[https://github.com/sergeyklay/bnf-mode/issues][issue tracker]] . ** Changes To see what has changed in recent versions of BNF Mode see: https://github.com/sergeyklay/bnf-mode/blob/master/NEWS . ** External Links - [[https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form][Wikipedia: Backus–Naur form]] - [[https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form][Wikipedia: Extended Backus–Naur form]] - [[https://en.wikipedia.org/wiki/Augmented_Backus%E2%80%93Naur_form][Wikipedia: Augmented Backus–Naur form]] - [[https://www.cl.cam.ac.uk/~mgk25/iso-14977.pdf][ISO/IEC 14977: EBNF]] - [[https://www.ics.uci.edu/~pattis/ICS-33/lectures/ebnf.pdf][EBNF: A Notation to Describe Syntax]] ** License BNF Mode is open source software licensed under the [[https://github.com/sergeyklay/bnf-mode/blob/master/LICENSE][GNU General Public Licence version 3]]. Copyright © 2019, 2020, Free Software Foundation, Inc.
bnf-mode NEWS -- history of user-visible changes. Copyright (C) 2019, 2020 Free Software Foundation, Inc. See the end of the file for license conditions. This file is about changes in BNF Mode. * BNF Mode 0.4.4 ** Rework documentation and provide Info-file. Previous releases of BNF Mode were bundled with incorrect "dir" file which contained an invalid link to documentation. This was resolved. All documentation now lives in "info bnf-mode". * BNF Mode 0.4.3 ** Fixed dependency list in the Cask file. Dependency list was fixed by specifying `cl-lib' version as well as removing `rx' (`rx' is part of GNU Emacs actually). This fixed the issue reported in <https://github.com/sergeyklay/bnf-mode/issues/5>. The issue related to installation from the TAR file. ** CI/CD process was moved on GitHub Actions. * BNF Mode 0.4.2 ** First release in ELPA. ** Introduced ALGOL 60 comments style. Disabled by default. ** Use semicolons as a comments. Only setting bnf-mode-algol-comments-style to non-nil will allow use semicolons as a regular terminal symbols. * BNF Mode 0.4.1 ** Minor fix related to build & deploy BNF Mode on Travis CI. * BNF Mode 0.4.0 ** Added comment-start-skip to improve recognize comments. ** Return back comment-start and comment-end. ** Use more intelligent terminal syntax recognition. Added support of ";" character as an extra character used in terminals. ** Provided ability to build installation package. See make help for more. * BNF Mode 0.3.2 ** First release in MELPA. ** Treat ' and " as a regular symbols. ** Removed no longer needed comment-* variables. ** In the BNF there are no grouping brackets except angle ones. ** Removed the bnf-mode-version function. Users can easily call describe-package or pkg-info-package-version interactively if they want to get this information. * BNF Mode 0.3.1 ** Fixed BNF rule name definition to follow ALGOL 60 report. * BNF Mode 0.3.0 ** Nonterminals may be preceded by an unlimited number of spaces. * BNF Mode 0.2.0 ** Comments are no longer use syntax table. ** Changed comment syntax from "#" to ";" to follow RFC822#2.8. * BNF Mode 0.1.0 ** Initial stable release. ---------------------------------------------------------------------- This file is part of GNU Emacs. GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. Local variables: coding: utf-8 mode: outline paragraph-separate: "[ ]*$" end: