@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.