# @noldova/context\.parsers 中文文档

规范地址：https://npmcn.com/package/%40noldova/context.parsers/

版本：0\.0\.4
npm 元数据更新时间：2026-11-02T00:39:12.384Z
中文译文更新时间：2026-11-02T00:56:20.119Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40noldova/context.parsers
原文对照：https://npmcn.com/package/%40noldova/context.parsers/?lang=original
项目主页：https://github.com/noldova-com/context#readme
源码仓库：https://github.com/noldova-com/context

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

- 包体积（解压后）：115 kB，56 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：5 个
- 首次发布：2026-10-31T03:14:16.599Z
- 最新版本发布：2026-11-02T00:39:12.077Z
- 已发布版本数：5（近 12 个月 5 个）

## 中文简介

CONTEXT语言解析器的共享基础：一个具有跨度和行位置的不可变源，它上面的一个读取器，以及每个语言解析器所基于的词法分析器和解析器基类。它没有语法；TypeScript， Regex和未来的语言

## 安装

```sh
npm install @noldova/context.parsers
```

也可以使用：`pnpm add @noldova/context.parsers`、`yarn add @noldova/context.parsers`、`bun add @noldova/context.parsers`

## README

# noldova.context.parsers

上下文语言解析器的共享基础：具有的不可变源 跨度和行位置，上面的读取器，词法分析器和解析器基 类，每种语言解析器都建立在这些类之上。它没有语法；打印稿, Regex和未来的语言是单独的包。

## 安装

```bash
npm install @noldova/context.parsers
```

## 模型

-   `Source` 保存文本一次。 `SourceSpan` 是一个半开放的UTF-16范围； `SourceLineMap` 将偏移量映射到行和回。
-   `SourceReader` 源或源的有界区域上的游标。最后 它返回空字符和代码点0，因此词法分析器比较字符 而不是检查结束；在哪里空字符是合法的 输入, `isAtEnd` 决定。
-   `Node` 是每个语法节点的基础：一个跨度和可选的琐事。一个 语言通过自己的声明合并向节点添加行为 包;语法代码识别节点类型 `instanceof`.
-   `Lexer` 拥有它的阅读器，报告到解析器上下文的诊断 收集器，每次调用产生一个节点。它检查两个不变量 每一种语言：lex要么推进，要么产生 `EndOfFileNode` 正好在最后，重复词法也遵循同样的规则。
-   `Parser` 保存一个当前节点。它按节点类型推进、消耗、查找 向前，并尝试解释与精确倒带，并重新释放电流 节点时，语法位置改变了标记的含义，例如 `>>` 在类型参数或 `/` 正则表达式的开头。
-   `ParserContext` 携带语法状态并拥有已发布的内容 `DiagnosticCollector`． 一种语言为它的标志和符号派生出它自己的上下文 缓存。

## 诊断

解析器上下文拥有的一个序列接收 报告的顺序：词法分析器的顺序是每个节点的顺序，语法的顺序是每个节点的顺序 解析。这是语法决策可以参考的序列。倒带恢复 当前节点，读取器偏移量，和序列长度，什么都没有 从中间移开。re-lex也不会移除任何东西；更换 扫描报告已经存在的东西，一种语言的扫描可以 在同一位置重复诊断应用其自身的抑制规则，如 TypeScript使用tsc的相同偏移量规则。

## 信任边界

将位置交还给读者，通过 `seek`， `advance`，相对的窥视； 或者跨度的创造，来自于读者本身，不需要再次验证； 这使每个令牌路径免于检查。所有接受偏移量的东西 或者从其他地方的span验证它： `Source`, `SourceReader` 构造函数, `SourceLineMap`， `SourceLine`, `SourcePosition`.

## 使用

语言解析器从这些类派生其节点、词法分析器和解析器：

```ts
import { DiagnosticCollector, EndOfFileNode, Lexer, LiteralNode, Node, Parser, ParserContext, Source, SourceSpan } from "@noldova/context.parsers";

class TextLiteralNode extends LiteralNode {
  public constructor(value: string, span: SourceSpan) {
    super(value, span);
  }
}

class TextLexer extends Lexer {
  public constructor(source: Source, diagnosticCollector: DiagnosticCollector) {
    super(source, diagnosticCollector);
  }

  protected override lexNode(): Node {
    const startOffset = this.reader.currentOffset;
    if (this.reader.isAtEnd)
      return new EndOfFileNode(new SourceSpan(startOffset, 0));

    const text = this.reader.readWhile(() => true).toString();
    return new TextLiteralNode(text, new SourceSpan(startOffset, text.length));
  }
}

class TextParser extends Parser<LiteralNode> {
  public constructor(context: ParserContext, lexer: TextLexer) {
    super(context, lexer);
  }

  protected override parseRootNode(): LiteralNode {
    const root = this.requireCurrentNode(LiteralNode);
    this.advance();
    return root;
  }
}

const source = new Source("text");
const context = new ParserContext(source);
const result = new TextParser(context, new TextLexer(source, context.diagnosticCollector)).parse();
console.assert(result.rootNode.value === "text" && result.diagnostics.length === 0);
```

例子的 `console` 需要Node的类型： `@types/node`, `"types": ["node"]` 在 `tsconfig.json`． 声明文件 `api/index.d.ts` 记录每个成员的合同和示例。

## 许可证

麻省理工学院;看到 `LICENSE`.

## 常见问题

### @noldova/context\.parsers 是什么？

CONTEXT语言解析器的共享基础：一个具有跨度和行位置的不可变源，它上面的一个读取器，以及每个语言解析器所基于的词法分析器和解析器基类。它没有语法；TypeScript， Regex和未来的语言

### 如何安装 @noldova/context\.parsers？

在项目目录运行 npm install @noldova/context\.parsers，或使用 pnpm add / yarn add / bun add。

### @noldova/context\.parsers 支持 TypeScript 吗？

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

### @noldova/context\.parsers 支持 ESM 还是 CommonJS？

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

### @noldova/context\.parsers 可以商用吗？

@noldova/context\.parsers 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @noldova/context\.parsers 还在维护吗？

最新版本 0\.0\.4 发布于 2026/11/02（1 天前）；至今共发布 5 个版本，其中过去 12 个月发布了 5 个；首次发布于 2026/10/31。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

