Next: Operator Precedence Grammars, Up: SMIE [Contents][Index]

#### 22.7.1.1 SMIE Setup and Features

SMIE is meant to be a one-stop shop for structural navigation and various other features which rely on the syntactic structure of code, in particular automatic indentation. The main entry point is `smie-setup` which is a function typically called while setting up a major mode.

Function: smie-setup grammar rules-function &rest keywords

  Setup SMIE navigation and indentation. grammar is a grammar table generated by `smie-prec2->grammar`. rules-function is a set of indentation rules for use on `smie-rules-function`. keywords are additional arguments, which can include the following keywords:

  - `:forward-token` fun: Specify the forward lexer to use.
  - `:backward-token` fun: Specify the backward lexer to use.

Calling this function is sufficient to make commands such as `forward-sexp`, `backward-sexp`, and `transpose-sexps` be able to properly handle structural elements other than just the paired parentheses already handled by syntax tables. For example, if the provided grammar is precise enough, `transpose-sexps` can correctly transpose the two arguments of a `+` operator, taking into account the precedence rules of the language.

Calling `smie-setup` is also sufficient to make TAB indentation work in the expected way, extends `blink-matching-paren` to apply to elements like `begin...end`, and provides some commands that you can bind in the major mode keymap.

Command: smie-close-block

  This command closes the most recently opened (and not yet closed) block.

Command: smie-down-list &optional arg

  This command is like `down-list` but it also pays attention to nesting of tokens other than parentheses, such as `begin...end`.