NPM 包 ts-pegjs 使用教程

PegJS 是一种用于构建解析器的解析表达式语言。ts-pegjs 是一个 PegJS 解析器生成器,它使用 TypeScript 语言来构建解析器。ts-pegjs 生成的解析器是类型安全的,并且在编译时就能发现错误。在本教程中,我们将学习如何使用 ts-pegjs 解析表达式。

安装和配置

ts-pegjs 可以使用 NPM 包管理器进行安装,如下所示:

--- ------- -- --------

这将安装 ts-pegjs 并将其添加到全局 npm 工具库中。接下来,您可以按照以下步骤将 ts-pegjs 添加到您的项目中:

  1. 创建一个新的文件夹来存储您的解析器项目。
  2. 在命令行中导航到该文件夹,然后运行以下命令:
--- ----

该命令将创建一个 package.json 文件,这是一个 npm 项目的配置文件。您可以根据需要配置项目信息。

  1. 然后,安装 ts-pegjs 和其 TypeScript 插件:
--- ------- -------- ---------- ----------- ----------

使用 ts-pegjs

使用 ts-pegjs 构建解析器的步骤如下:

  1. 创建一个 *.peg.ts 文件。这是您的 PEG 文法输入文件。
  2. 在该文件中定义您的语法和语义规则。
  3. 运行 ts-pegjs,将输入文件转换为 TypeScript 解析器文件。
  4. 将 TypeScript 解析器文件添加到您的项目中,并使用解析器来解析输入文本。

示例

让我们使用 ts-pegjs 构建一个解析器,该解析器可以在输入字符串中查找数字,并返回所有找到的数字。我们将定义一个名为 NumberScanner 的类,该类具有如下方法:

------ - -- --- ---- -----------

----- ------------- -

  ------- ------- -----------

  ------------- -
    -- ---- --- ------ ----- --- ------- ------ -- --- --- ------
    ----------- - --------------
      ----- - -------
      ------ - ------
    --
    - ------- -------- ---
  -

  ------ ----------- -------- -------- -
    ------ -------------------------
  -
-

我们的解析器由 start 和 number 两个规则组成。 start 规则表示从输入文本的开头开始查找数字,并且可以找到任意多个数字。 number 规则表示如何查找一个数字。

在构造函数中,我们使用 ts-pegjs 的 generate 方法将 PEG 文法字符串转换为 TypeScript 代码。 output: "source" 参数告诉 ts-pegjs 生成的代码是字符串格式,而不是编译后的 JavaScript 文件。

最后,我们定义了一个 scan 方法来调用解析器并返回所有找到的数字。现在,我们可以使用以下代码来生成解析器并测试它:

--- ------- - --- ----------------
--- ------ - ----------------- --- ------
--------------------  -- ------- ----- ---- ----

这会在控制台输出所有找到的数字。在输入文本中找到的数字将作为数字数组返回。

使用语义动作

PEG 文法不仅仅是找到模式的方法。我们可以在规则中嵌入 TypeScript 代码片段,以便在找到模式时执行特定的操作。让我们再来一个示例,添加一些语义动作:

----- ----------------- -

  ------- ------- -----------

  ------------- -
    -- ---- --- ------ ----- --- ------- ------ -- --- --- ------
    ----------- - --------------
      ----- - --------
      -------- - ------------------- - -------- - ---- - ---------------------- -
        --- ------ - -----
        --- ---- - - -- - - ------------- ---- -
          -- ------------------- --- ---- -
            ------ -- ------------------
          - ---- -
            ------ -- ------------------
          -
        -
        ------ -------
      -
      -------------- - ------------ - -------- - ---- - --------------- -
        --- ------ - -----
        --- ---- - - -- - - ------------- ---- -
          -- ------------------- --- ---- -
            ------ -- ------------------
          - ---- -
            ------ -- ------------------
          -
        -
        ------ -------
      -
      ------- - ------ - --- - ----------------- - --- - ------ --------- -
      ------ - ---- ------ -
        ------ ---------------- --- - ----------------- --- --- - -- - ---
      -
      - - - --------
    --
    - ------- -------- ---
  -

  ------ ------------ -------- ------ -
    ------ -------------------------
  -
-

这是一个简单的计算器解析器,用于解析基本算术表达式。相比于上一个示例,我们添加了一个 additive 规则,在该规则中进行了语义操作。

在 additive 规则中,我们为了了解要执行什么操作,使用了两个 JavaScript 变量:left 和 right。左和右是我们使用语法解析器找到的左和右表达式。接下来,我们遍历所有右表达式,并根据加号或减号对左侧进行相应的算术运算。最后,我们返回结果值。

总结

在本教程中,我们介绍了 ts-pegjs,并详细讲解了如何使用它来构建 TypeScript 解析器。我们学习了如何定义 PEG 文法和语义规则,如何运行 ts-pegjs 生成 TypeScript 代码,并如何使用代码来解析输入文本。

我们还了解了如何在规则中添加语义操作,这使得我们可以执行特定的操作而不仅仅是找到模式。这些操作可以将解析器转换为一个有用的工具,用于解析输入文本并执行复杂的操作。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/5eedc3b2b5cbfe1ea0612145


猜你喜欢

  • npm 包 @znemz/node-memwatch 使用教程

    简介 @znemz/node-memwatch 是一个基于 Node.js 的内存泄漏检测工具,可帮助开发人员在开发过程中实时监测应用的内存使用情况,定位内存泄漏问题并及时修复。

    4 年前
  • npm包 @znemz/js-common-debug-clone 使用教程

    简介 在前端开发中,经常会遇到需要对一些数据进行调试的情况,并且我们通常会使用 console 打印出这些数据来查看。然而,在实际开发过程中,由于数据结构复杂或者引用关系错综复杂,使用 console...

    4 年前
  • npm 包 @znemz/js-common-tsconfig-clone 使用教程

    在前端开发中,使用 TypeScript 已经成为了一种趋势,通过 type checking、自动补全等功能提升了项目的可维护性。虽然 TypeScript 带来了很多好处,但是在项目中需要管理好 ...

    4 年前
  • npm 包 @znemz/js-common-cpy-cli 使用教程

    概述 npm 是 Nodejs 的包管理器,允许用户共享和重复使用可重用的代码模块。使用 npm 可以轻松地安装、更新和卸载 JavaScript 包。其中,@znemz/js-common-cpy-...

    4 年前
  • npm 包 @znemz/js-common-jest-config-mono-package-clone 使用教程

    简介 @znemz/js-common-jest-config-mono-package-clone 是一款基于 Jest 的测试配置包,用于一站式的测试解决方案。

    4 年前
  • npm包 @znemz/react-extras-jest 使用教程

    在 React 的开发过程中我们经常需要使用到 Jest 测试框架。而 @znemz/react-extras-jest 这个 npm 包就提供了一些有用的 Jest 工具来简化我们在 React 组...

    4 年前
  • npm 包 self-signed 使用教程

    在前端项目开发中,我们常常需要使用 HTTPS 协议来保证数据的传输安全性。虽然我们可以通过自己的 CA 证书来进行签名,但这样比较麻烦,而且有时候并不需要那么高的安全级别。

    4 年前
  • npm 包 json-fixer 使用教程

    在前端开发过程中,我们经常需要操作 JSON 格式的数据。在这个过程中,我们经常会遇到一些 JSON 不符合规范或者格式混乱的问题。json-fixer 可以帮我们自动化地处理这类问题。

    4 年前
  • npm 包 @types/lodash.isplainobject 使用教程

    在前端开发中,我们经常会用到 lodash 这个 JavaScript 工具库,它提供了很多便捷的方法来操作和处理数据。而 @types/lodash.isplainobject 则是一个定义了 is...

    4 年前
  • npm 包 @types/lodash.unescape 使用教程

    在前端开发过程中,我们常常需要使用到一些方便的工具库。其中,lodash 是一个非常常用的、功能强大的工具库。lodash.unescape 是 lodash 提供的一个函数,用于将 HTML 实体转...

    4 年前
  • npm 包 @istanbuljs/nyc-config-babel 使用教程

    前言 在前端开发中,测试和代码覆盖率变得越来越受欢迎。而 Istanbul 就是一个广泛使用的代码覆盖率工具。其优点是易于使用,配置简单且易于集成。在本文中,我们将介绍如何使用 @istanbuljs...

    4 年前
  • npm 包 remark-lint-no-duplicate-defined-urls 使用教程

    前言 在前端的开发过程中,我们通常需要处理大量的文本信息。而 markdown 格式的文本因其简洁明了、易于编写和阅读的特点,已经成为了很多开发者的首选文本格式。但是,在 markdown 文本中存在...

    4 年前
  • npm包remark-lint-no-unneeded-full-reference-image使用教程

    作为一个前端工程师,我们总会遇到需要在网站或应用程序中添加图片的情况。当我们使用 markdown 去描述文档或文章时,经常需要引用一些图片,而这些图片存储在其他的位置或其他网络上。

    4 年前
  • npm 包 remark-lint-no-unneeded-full-reference-link 使用教程

    在 Markdown 中,可以通过使用链接来引用其他文档或网页中的内容。使用链接的同时,你需要定义一个链接名称或者文本,使用 [name](url) 的格式来创建一个链接。

    4 年前
  • npm 包 forceable-tty 使用教程

    在前端开发中,我们通常需要在终端运行一些命令来进行调试、构建等操作。然而,在某些情况下,我们可能无法使用终端,比如在一些编辑器上使用终端插件时,会出现一些问题。 forceable-tty 就是一个可...

    4 年前
  • npm 包 "@hutson/parse-repository-url" 使用教程

    背景 在进行前端开发时,我们经常需要使用到 npm 包,其中一个主要功能就是管理我们的依赖关系,方便我们轻松管理项目中的各种模块和代码库。在我们引用一个 npm 包时,有些时候我们需要知道这个包存放的...

    4 年前
  • npm包@hutson/conventional-changelog-config使用教程

    随着前端开发工程化的不断发展,各种工具和技术层出不穷,npm包也成为了前端项目中不可或缺的一部分。@hutson/conventional-changelog-config是一款常用的npm包,它可以...

    4 年前
  • npm 包 @hutson/eslint-config 使用教程

    前言 在前端开发过程中,我们会写很多的 JavaScript 代码。为了提高代码的质量和可维护性,我们通常会使用 ESLint 来帮助我们检查代码。而在 ESLint 的配置中,我们可以使用一些第三方...

    4 年前
  • npm 包 @hutson/set-npm-auth-token-for-ci 使用教程

    在前端开发过程中,我们经常需要使用 npm 包管理工具来安装和管理依赖项。但是,在某些情况下,我们需要在 CI/CD 环境中使用 npm 包,并且需要在没有交互式登录的情况下进行身份验证。

    4 年前
  • npm 包 npm-publish-git-tag 使用教程

    前言 在前端开发中,我们常常需要使用到各种 npm 包。而当我们开发自己的 npm 包时,就需要发布它以供他人使用。npm-publish-git-tag 就是一款帮助我们发布 npm 包的工具。

    4 年前

相关推荐

    暂无文章