#parser #wdl #incremental

tree-sitter-wdl-1

tree-sitter 解析库的 WDL 1.x 语法

10 个版本

0.1.10 2023年2月17日
0.1.8 2023年2月13日
0.1.4 2023年1月23日
0.1.1 2022年12月21日

文本编辑器 中排名 166

每月下载量 39

MIT 许可证

355KB
13K SLoC

C 12K SLoC JavaScript 687 SLoC // 0.0% comments C++ 395 SLoC Rust 62 SLoC

tree-sitter-wdl

Tree-sitter 语法,用于 WDL(工作流描述语言)。

用法

有关可用语言绑定和基本用法信息,请参阅 Tree-sitter 文档。要使用 Rust 绑定,请将以下内容添加到您的 Cargo.toml 文件中

[dependencies]
tree-sitter-wdl-1 = "0.1.0"

提供了一个便利函数,用于创建一个新的 TreeSitter 解析器,语言设置为 tree-sitter-wdl-1

use tree_sitter_wdl_1 as wdl;

fn main() {
    let parser = wdl::parser().expect("Error creating WDL parser");
    ...
}

还有一个便利函数可以将单个文档解析为 tree_sitter::Tree

use tree_sitter::Tree;
use tree_sitter_wdl_1 as wdl;

fn main() {
    let text = r#"
    version 1.0

    workflow foo {
    }
    "#;
    let tree: Tree = wdl::parse_document(text).expect("Error parsing WDL parser");
    ...
}

设计

此存储库提供单个 语法,用于解析 WDL 版本 1.x(不支持 draft-*development 版本)。该语法设计为宽容且容错。从该语法生成的解析器将允许 WDL 规范禁止的或仅在特定 WDL 版本中允许的标记组合。

由于 Tree-sitter 生成 LR(1) 解析器,因此只有一个标记的向前查看可用,因此需要多个标记向前查看的语法元素难以编写或不可能编写。对于 WDL,这意味着字符串(包括 command 块的内容)无法由语法描述。幸运的是,Tree-sitter 允许外部解析这些语法元素。WDL 语法的外部解析器在 scanner.cc 中,并实现了在 Tree-sitter 文档 中描述的 API。

开发

  • 按照说明安装 Tree-sitter CLI
  • 生成和编译解析器: npm run build
  • 运行测试 npm run test

依赖项

~3–5MB
~95K SLoC