# @divvun/cg3 中文文档

规范地址：https://npmcn.com/package/%40divvun/cg3/

版本：0\.4\.0
npm 元数据更新时间：2026-10-31T22:42:13.721Z
中文译文更新时间：2026-10-31T23:58:51.658Z
软件包许可：GPL-3\.0-or-later

本文由上游 README 机器翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40divvun/cg3
原文对照：https://npmcn.com/package/%40divvun/cg3/?lang=original
项目主页：https://github.com/divvun/cg3-rs/tree/main/js/cg3#readme
源码仓库：https://github.com/divvun/cg3-rs

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：1.9 MB，24 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=20
- 运行依赖：0 个
- 首次发布：2026-10-31T22:41:15.818Z
- 最新版本发布：2026-10-31T22:42:12.337Z
- 已发布版本数：2（近 12 个月 2 个）

## 中文简介

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

## 安装

```sh
npm install @divvun/cg3
```

也可以使用：`pnpm add @divvun/cg3`、`yarn add @divvun/cg3`、`bun add @divvun/cg3`

## README

# @divvun / cg3

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

```sh
npm install @divvun/cg3
```

## 运行语法

```js
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](https://www.npmjs.com/package/@divvun/hfst)的tokeniser 分析它，保持“因纽特人”的十二种解读之一和五种解读之一 “nunaat”:

```js
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`，每个移除的读数都保留在输出中， 注释掉，加上删除它的规则：

```js
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` 关于语法的报告：

```js
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`：

```js
{
  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](https://github.com/divvun/cg3-rs) 存储库:

```sh
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 是什么？

用于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 和提交记录判断。

