@divvun/cg3

中文文档
0.4.0发布于 2026/11/01GPL-3.0-or-laterTypeScriptES Module零依赖

用于JavaScript的VISL CG-3(约束语法):运行编译。cg3b语法并给出vislcg3给出的输出,如浏览器、Web worker、Deno、Node和Bun的WebAssembly。

中文使用文档
文档目录10 节
  1. 运行语法
  2. 选项
  3. 语法信息
  4. 启动模块
  5. 内存
  6. 错误
  7. 日志记录
  8. 如何检查
  9. 发展中
  10. 执照

@divvun / cg3

VISL CG-3 JavaScript。它加载编译过的 约束语法(.cg3b),并在文本上运行它们,运行给出 输出 vislcg3 给出相同的语法,输入和选项,字节为 字节。它是。 cg3-rs 图书馆,写 在Rust中构建为WebAssembly。它运行在浏览器,Web worker, Deno, Node 20及以后版本,和Bun,作为一个ES模块和一个 .wasm 文件。

npm install @divvun/cg3

运行语法

import { init, readGrammar } from "@divvun/cg3";

await init();

const response = await fetch("/cg3/disambiguator.cg3b");
const grammar = readGrammar(new Uint8Array(await response.arrayBuffer()));

const { output, warnings } = grammar.apply(input);

grammar.free();

readGrammar 接受编译后的语法,如 cg-comp 写它。事实并非如此 阅读文本语法:他们 INCLUDE浏览器没有的S名称文件, 所以首先编译它们。 apply(input, options?) 在一个输入上运行语法 并返回 { output, warnings }:输出为字符串,以及每个警告 和非致命错误运行记录,按顺序。每个呼叫都有自己的运行, 失败的运行在不损害语法的情况下抛出。

lang-kal的消歧义词,给出“因纽特语nunaat” @divvun / hfst的tokeniser 分析它,保持“因纽特人”的十二种解读之一和五种解读之一 “nunaat”:

import { readTokeniser } from "@divvun/hfst"; // after its own init()

const input = readTokeniser(pmhfstBytes).format("Inuit nunaat.", "giella-cg");
grammar.apply(input).output;
// "<Inuit>"
// 	"inuk" Gram/str N Rel Pl <W:0.0>
// :
// "<nunaat>"
// 	"nuna" N Abs Sg 3PlPoss <W:0.0>
// "<.>"
// 	"." CLB <W:0.0>

选项

options 将每个运行选项命名为其 vislcg3 长期权,在 camelCase: --num-windows 4 是 { numWindows: 4 } 和 --trace 是 { trace: true }. 与 trace,每个移除的读数都保留在输出中, 注释掉,加上删除它的规则:

grammar.apply(input, { trace: true }).output;
// "<Inuit>"
// 	"inuk" Gram/str N Rel Pl <W:0.0>
// ;	"Inuit" Sem/Hum Prop Abs Pl <W:0.0> REMOVE:3212:tidlig0665
// ;	"Inuit" Sem/Hum Prop Rel Pl <W:0.0> REMOVE:3212:tidlig0665
// ...

这个 input 和 output 格式是 "cg" (默认), "niceline", "apertium", "fst", "plain" 和 "jsonl". 一个包没有的选项 知道把 Cg3Error 使用代码 invalid-argument,并在消息中列出 一种是这样的。语法设置的选项 CMDARGS 像他们那样应用 vislcg3. 一个 EXTERNAL 规则运行失败,因为没有进程 开始。

语法信息

grammar.info() 给什么 vislcg3 -v 关于语法的报告:

grammar.info();
// { sections: 6, templates: 0, rules: 5070, sets: 11233, tags: 11285,
//   rulesAny: 1672, hasDependencyRules: false, hasRelationRules: false }

启动模块

init() 加载 .wasm 文件那船旁边的包裹,在每一个 运行时,包括Node。调用一次,然后在做其他事情之前等待它; 再次调用它将返回相同的承诺。它也接受URL a Response, 模块的字节或已编译的 WebAssembly.Module,为捆绑商和 工人们得到了一个。 version() 给出cg3库的版本 这个包是由。

内存

语法保存WebAssembly内存。呼叫 free() 当它完成时,或者 用…申报 using:

{
  using grammar = readGrammar(bytes);
  grammar.apply(input);
} // freed here

语法被抛弃了 free() 被垃圾收集后释放。 对释放语法的调用会抛出 Cg3Error 使用代码 freed.

错误

每个错误都是 Cg3Error 与一个 code 该代码可以测试: not-initialised, init-failed, poisoned, freed, invalid-argument, invalid-grammar (不是a的字节 .cg3b), run-failed. 恐慌 在模块内部捕获它。从那时起,实例就被毒害了 电话把 poisoned,因为它的记忆不再可信。加载 重新分页或处理以恢复。

日志记录

库的日志事件,从加载语法到运行语法,请转到 控制台,警告和错误只有默认值。 setLogger((event) => ...) 取它们,每个都有它的 level, target 和 message. setLogLevel("debug") 更改发送的数量,和 setLogLevel("off") 发送什么。不管是什么记录器, apply 仍然返回其运行的警告。

如何检查

该套件运行cg3-rs黄金语料库中的每个语法, 在Node, Bun, Deno和一个无头的Chromium下,在页面和Web Worker中, 并将输出与 vislcg3字节对字节。68次测试中的65次 匹配。其中三家是免税的,因为他们经营一家 EXTERNAL 规则或传递一个选项 这个套餐不提供(--nrules, --vislcg-compat); 没有不同。

发展中

这个包是从 crates/cg3-wasm 在 cg3-rs 存储库:

node js/build.mjs           # js/cg3/dist, ready for npm publish from js/cg3
node js/build.mjs --test    # and the test build, the tools and the fixtures
node js/test/run.mjs --require-all

构建需要 wasm32-unknown-unknown 目标, wasm-bindgen 命令行界面 在版本中 crates/cg3-wasm 销, wasm-opt 和 npx.

执照

gpl - 3.0 -或-。包装里有许可证的文字 dist/COPYING.

版本与发布记录

@divvun/cg3 共发布 2 个版本,首次发布于 2026/11/01;过去 12 个月发布了 2 个版本。

版本发布日期距今
0.4.0latest2026/11/012 天前
0.0.0-stage2026/11/012 天前

关于 @divvun/cg3 的常见问题

@divvun/cg3 是什么?

用于JavaScript的VISL CG-3(约束语法):运行编译。cg3b语法并给出vislcg3给出的输出,如浏览器、Web worker、Deno、Node和Bun的WebAssembly。

如何安装 @divvun/cg3?

在项目目录运行 npm install @divvun/cg3,或使用 pnpm add / yarn add / bun add。

@divvun/cg3 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@divvun/cg3 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@divvun/cg3 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@divvun/cg3 可以商用吗?

@divvun/cg3 使用 GPL-3.0-or-later 许可。强 Copyleft:分发包含该代码的软件时,整个作品需以 GPL-3.0 兼容许可开源,并附带专利与反锁定条款。仅内部使用不触发此义务。以上为概括,不构成法律意见,请以许可原文为准。

@divvun/cg3 还在维护吗?

最新版本 0.4.0 发布于 2026/11/01(2 天前);至今共发布 2 个版本,其中过去 12 个月发布了 2 个;首次发布于 2026/11/01。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。