elisp: SMIE
22.7.1 Simple Minded Indentation Engine
---------------------------------------
SMIE is a package that provides a generic navigation and indentation
engine. Based on a very simple parser using an operator precedence
grammar, it lets major modes extend the sexp-based navigation of Lisp to
non-Lisp languages as well as provide a simple to use but reliable
auto-indentation.
Operator precedence grammar is a very primitive technology for
parsing compared to some of the more common techniques used in
compilers. It has the following characteristics: its parsing power is
very limited, and it is largely unable to detect syntax errors, but it
has the advantage of being algorithmically efficient and able to parse
forward just as well as backward. In practice that means that SMIE can
use it for indentation based on backward parsing, that it can provide
both ‘forward-sexp’ and ‘backward-sexp’ functionality, and that it will
naturally work on syntactically incorrect code without any extra effort.
The downside is that it also means that most programming languages
cannot be parsed correctly using SMIE, at least not without resorting to
some special tricks (SMIE Tricks).
Menu