Skip to content

编写语法

编写语法需要创造力。可以用无数个上下文无关语法(CFG)来描述任何给定的语言。为了生成一个好的 Tree-sitter 解析器,您需要创建一个具有两个重要特性的语法:

  1. 直观的结构 - Tree-sitter 的输出是一个具体的语法树;树中的每个节点直接对应于语法中的一个终结符或非终结符。因此,为了生成一个易于分析的树,语法中的符号与语言中可识别的结构之间应该有直接的对应关系。这可能看起来很明显,但与在语言规范Yacc / Bison 解析器等上下文中编写的上下文无关语法的方式非常不同。
  2. 严格遵循 LR(1) - Tree-sitter 基于 GLR 解析算法。这意味着虽然它可以处理任何上下文无关语法,但它在处理一类称为 LR(1) 语法的上下文无关语法时效率最高。在这方面,Tree-sitter 的语法类似于(但比)YaccBison 语法限制较少,但与 ANTLR 语法解析表达式语法或语言规范中常用的模糊语法不同。

仅通过将现有的上下文无关语法直接翻译为 Tree-sitter 的语法格式,您不太可能满足这两个特性。通常需要进行一些调整。以下部分将更详细地解释这些调整。

Using Fields

Hiding Rules