SMIE 是一个提供通用结构导航与缩进引擎的包。它基于一个使用运算符优先文法的极简解析器, 允许主模式将 Lisp 的符号表达式导航能力扩展到非 Lisp 语言,并提供简单易用且可靠的自动缩进。
与编译器中常见的解析技术相比,运算符优先文法是一种非常基础的解析技术。
它具有以下特点:解析能力非常有限,基本无法检测语法错误,
但算法效率高,并且可以向前或向后双向解析。
在实际应用中,这意味着 SMIE 可以基于向后解析实现缩进,
可以同时提供 forward-sexp 和 backward-sexp 功能,
并且无需额外处理就能自然地在语法不合法的代码上工作。
缺点是,这也意味着大多数编程语言无法直接用 SMIE 正确解析,
至少需要借助一些特殊技巧(see 适配简易解析器)。