NonGNU ELPA - bison-mode


Major mode for editing bison, yacc and lex files.
bison-mode-0.4.tar, 2021-Aug-29, 40.0 KiB
Eric Beuscher <>
Home page
Browse repository
CGit or Gitweb

To install this package, run in Emacs:

M-x package-install RET bison-mode RET

Full description

I wrote this since I saw one mode for yacc files out there roaming the
world.     I was daunted by the fact the it was written in 1990, and Emacs
has evolved so much since then (this I assume based on its evolution since
i started using it).     So I figured if i wanted one, I should make it
myself.     Please excuse idiosyncrasies, as this was my first major mode
of this kind.     The indentation code may be a bit weird, I am not sure,
it was my first go at doing Emacs indentation, so I look at how other
modes did it, but then basically did what I thought was right

I hope this is useful to other hackers, and happy Bison/Yacc hacking
If you have ideas/suggestions/problems with this code, I can be reached at

Eric --- Sat Mar  7 1:40:20 CDT 1998

Bison Sections:
there are five sections to a bison file (if you include the area above the
C declarations section.     most everything in this file either does
actions based on which section you are deemed to be in, or based on an
assumption that the function will only be called from certain sections.
the function `bison--section-p' is the section parser

indentations are done based on the section of code you are in.    there is
a procedure `bison--within-braced-c-expression-p' that checks for being in
C code.    if you are within c-code, indentations should occur based on
how you have your C indentation set up.     i am pretty sure this is the
there are four variables, which control bison indentation within either
the bison declarations section or the bison grammar section

flaw: indentation works on a per-line basis, unless within braced C sexp,
i should fix this someday
and to make matters worse, i never took out c-indent-region, so that is
still the state of the `indent-region-function' variable

by default, there are electric -colon, -pipe, -open-brace, -close-brace,
-semicolon, -percent, -less-than, -greater-than
the indentation caused by these work closely with the 4 indentation
variables mentioned above.
any of these can be turned off individually by setting the appropriate
`bison-electric-...' variable.     or all of them can be turned off by
setting `bison-all-electricity-off'

todo:  should make available a way to use C-electricity if in C sexps