Lezer 概述

lezer

Lezer 概述

参考

Lezer 是 CodeMirror 6 版本所使用的语法解析器,用于对代码文本进行分词 tokenizer 并构建语法树 syntax tree

说明

Lezer 所生成的 syntax tree 具有语法相关的信息,但是和常见的 AST(abstract syntax tree 抽象语法树)不同,它所生成的是 non-abstract syntax tree,即在语法树中会保留空格、缩进等字符级别的详细信息,以便在对文本高亮时进行精确的定位

核心模块

Lezer 有三个核心模块:

  • @lezer/common 模块:描述 Lezer 语法树所采用的数据结构,以及一些操作 syntax tree 的方法
  • @lezer/generator 模块:该模块提供命令行工具和 JS 方法,可以通过两种方式根据用户编写的(针对特定编程语言的)语法描述文件 .grammar 生成解析表 parse table(JS 文件)
  • @lezer/lr 模块:该模块提供一个 GLR(generalized left-to-right rightmost derivation parser 通用的自左向右推导最右内容的解析器),该 parser 支持增量式解析,根据 @lezer/generator 模块所生成的解析表,对特定的文本进行分词并构建语法树

其他模块

另外官方还提供了一个 @lezer/highlight 模块,提供了一些辅助函数,以便往语法树上附加高亮相关的信息

语法描述文件

将对特定编程语言的语法规则描述编写在后缀为 .grammar 的文件里,然后通过(由 @lezer/generator 模块提供的命令行工具)命令 lezer-generator xxx.grammar -o xxx.js 根据描述文件生成 parse table 解析表

Lezer 官方提供了一系列常见编程语言的 grammar 文件可以直接使用,或参考这些示例为所需语言编写相应的 .grammar 语法描述性文件

提示

CodeMirror 6 也可以使用 CodeMirror 5 版本的语法解析器,以复用旧的资源,但是只能实现分词等简单的功能


Copyright © 2025 Ben

Theme BlogiNote

Icons from Icônes