npm 包 nearley-there 使用教程

前言

在前端技术发展的现在,关于语言语法解析的需求日益增加。而在语法解析的过程中,我们除了可以自己手写解析器之外,还可以使用现成的 npm 包,其中包括了 nearley-there

本篇文章将介绍如何使用 nearley-there,包括其安装、使用方式和示例代码。读完本文,你将深入了解 nearley-there 的使用方式,并能够应用到自己的项目中去。

安装

首先,我们需要安装 nearley-there 以便在项目中使用它。可以使用 npm 进行安装,命令如下:

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

安装完成之后,我们就可以在项目中使用 nearley-there 了。

使用方式

nearley-there 的主要作用是解析文本,转换为 JavaScript 对象。使用 nearley-there,我们需要先定义一个 grammar(文法),然后用这个 grammar 创建一个 nearley 实例。这个实例可以接收文本,然后进行解析并转换成对象。

定义 grammar

先看一个例子,定义以下简单的 grammar 文件,文件名为 example.ne

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

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

这个文件定义了一个文法,用于将一个或多个单词转换为一个数组。其中,我们使用了 "%" 符号来指示 nearley-there 在解析这个文件时应该将内容视为 JavaScript 代码。

文法文件需要包含以下内容:

  1. 定义规则的标签,例如 startword
  2. 规则的定义,定义规则的语法为:“规则名 -> 规则列表”,例如 start -> word* 表示 start 规则以零个或多个 word 规则开头;
  3. 规则的列表,列表中可以使用正则表达式或者文法的标签,例如 letters+ 表示一个或多个字母。

在上面的例子中,"{% %}" 中的 JavaScript 代码可以进行任何类型的编程操作。

需要注意的是,在列表中可以使用 JavaScript 函数来进行更为复杂的逻辑处理。在上例中,我们定义了一个 d => null 的函数,它将在解析过程中将空格和换行符转换为 null 值。

使用 nearley-there

有了上面的 grammar 文件,我们便可以使用 nearley-there 进行解析。首先,我们需要使用 nearley-parse 工具将 grammar 文件解析为 JavaScript 代码:

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

这条命令将生成一个 JavaScript 文件,文件名为 example.js,我们需要在项目中引入它:

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

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

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

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

在上面的代码中,我们首先引入了 nearley 包,以及使用 nearley-parse 编译后的 example.js 文件。然后,我们创建了一个 nearley 实例 parser,并将 example 加载到这个实例中。接着,我们使用 feed 方法将文本输入到这个实例中,最后得到解析结果。

需要注意的是,在使用 nearley-there 进行解析时,输出的结果很可能是一个数组。在规则中定义的文本,解析出来的结果可能是一个字符串或一个数组。在调用时需要根据情况对结果进行进一步处理。

示例代码

下面我们来看一个更为具体的例子,使用 nearley-there 实现一个四则运算的计算器。

首先,我们定义一个 calc 的词法定义,名为 calc.ne

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

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

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

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

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

这个词法文件定义了以下规则:

  1. operation 规则定义了四个基本运算
  2. number 规则定义了数字类型;
  3. start 规则定义了一个初始的数字;
  4. 运算符由 _+-*/ 组成。

其中,%{ %} 中的代码表示 JavaScript 片段。

下面是实现计算器的 JavaScript 代码:

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

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

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

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

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

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

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

在这个代码中,我们首先将输入的字符串传入 nearley 实例进行解析,得到解析树。然后,我们定义了一个 traverse 函数,用于将解析树转为计算器所需要的树形结构。该函数在解析树中进行递归查找,如果遇到数组就将其转换为可进行计算的树形结构。

接着,我们定义了一个 evalNode 函数,用于计算树形结构。在这个函数中,根据操作符分别计算 leftright 参数的结果,并将结果作为函数返回值。

最后,我们通过传入 traverse 转换后的树形结构,调用 evalNode 计算出结果,并将其输出。

结论

本文主要介绍了 npm 包 nearley-there 的使用方式,包括了安装方法、规则定义和示例代码。这个 npm 包能够帮助我们将文本转换为 JavaScript 对象,在进行语法解析的过程中发挥重要作用。

在实际应用中,我们可以使用一个定义好的 grammar 文件对文本进行解析和转换。需要注意的是,转换后得到的结果很可能是一个数组,需要根据规则进行进一步的处理。希望在近期的开发工作中使用 nearley-there 的同学能够从本文中获得一些有用的知识点,加强技术水平,提高开发效率。

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


猜你喜欢

  • npm 包 corpjs-system 使用教程

    简介 corpjs-system 是一个力求更好地管理和组织前端项目的 npm 包,提供了对工具链、代码结构、部署等方面的优化和规范。这篇文章将介绍 corpjs-system 的安装和使用方法,以及...

    2 年前
  • npm 包 @uic/mobx-react-form 使用教程

    介绍 @uic/mobx-react-form 是一个基于 Mobx 和 React 实现的表单组件库,方便快捷地创建表单。其中 Mobx 负责数据状态管理和数据共享,React 负责 UI 渲染,两...

    2 年前
  • npm 包 hutils 使用教程

    什么是 hutils ? hutils 是一个基于 JavaScript 的 npm 包,提供了一些常用的工具方法,方便我们在前端开发过程中使用。它的功能包括数组、字符串、对象、函数等方面的操作,可以...

    2 年前
  • npm包resource-class使用教程

    什么是resource-class resource-class是一个用于前端开发的npm包,主要用于构建更加规范和易于管理的前端资源文件类。通过统一的文件命名和目录结构,将前端资源模块化和组合化,从...

    2 年前
  • NPM 包 lastr 使用教程

    前言 在前端开发过程中,我们经常需要处理日期时间,而 JavaScript 自带的日期时间处理功能十分有限,无法满足我们的需要。此时,第三方库 lastr 可以帮助我们解决这个问题。

    2 年前
  • npm 包 alfred-mac-torrents 使用教程

    前言 Torrent 是指 BitTorrent 协议,它是一种点对点 (P2P) 文件共享协议的通称。在 Mac 上下载 Torrent 文件,我们通常会使用类似于 Transmission 的客户...

    2 年前
  • npm 包 corpjs-amqp 使用教程

    最近,我们需要在前端开发中使用 AMQP 协议进行一些消息队列的实现,于是我们发现了一个非常好用的 npm 包:corpjs-amqp。 在这篇文章中,我们将详细介绍如何使用该 npm 包,以及它应用...

    2 年前
  • npm 包 cschweda-webpack-template 使用教程

    从零开始创建一个前端项目是一件费时费力的事情,Webpack 使这个过程变得更加容易。同时,有许多的 webpack 模板都可以帮助你快速启动你的项目。此处,我们推荐一个名为 cschweda-web...

    2 年前
  • npm 包 generator-ng-cli-lib 使用教程

    什么是 generator-ng-cli-lib? generator-ng-cli-lib 是一个 npm 包,是一个基于 Angular CLI 和 Node.js 的一个生成器,可以帮助开发者快...

    2 年前
  • npm 包 exificient.js 使用教程

    介绍 exificient.js 是一个用于解析和生成 EXI 格式的 JavaScript 库。EXI(Efficient XML Interchange)是一种用于压缩 XML 数据的格式,在一些...

    2 年前
  • npm 包 flowchat-facebook-messenger 使用教程

    Facebook Messenger 是一个非常流行的消息应用程序,可以与 Facebook 的大部分用户进行通信。在前端领域,使用 flowchat-facebook-messenger 可以帮助开...

    2 年前
  • npm 包 gfm-markdown-fixture 使用教程

    gfm-markdown-fixture 是一个 npm 包,它用于生成 GitHub Flavored Markdown(GFM)语法的示例代码片段。这个 npm 包非常有用,它可以帮助我们在编写使...

    2 年前
  • npm包pubsubr的使用教程

    概述 npm包pubsubr全称为“Publish/Subscribe”,即发布/订阅模式,它是一种常见的设计模式,用于解耦一个系统中的不同部分。该模式涉及两个主要角色:发布者和订阅者,其中发布者发布...

    2 年前
  • npm 包 users.json 使用教程

    简介 在前端开发中,当我们需要使用一些用户数据时,我们可能会选择从后端获取或者使用本地文件。但是有时候我们需要一些测试数据或者临时开发数据,使用本地文件会有些繁琐。

    2 年前
  • npm 包 ng2-autocep 使用教程

    介绍 ng2-autocep 是一个基于 Angular 2+ 的 npm 包,用于实现自动完成输入框联想地址功能。它使用了 Viacep API 来查询巴西的邮政编码和地址信息。

    2 年前
  • npm 包 react-native-header-bar 使用教程

    React Native 是一种基于 JavaScript 的跨平台开发框架,能够帮助前端开发人员更快地开发和发布原生应用程序。React Native 支持组件化开发,这意味着您可以重复使用现有的组...

    2 年前
  • npm包 weixin-payment-sdk 使用教程

    在微信小程序开发中,支付功能是一个必不可少的部分。weixin-payment-sdk 是一个 Node.js 的npm包,它为微信小程序提供了统一的支付接口。在本教程中,我们将介绍如何使用 weix...

    2 年前
  • npm 包 action-validator 使用教程

    介绍 在前端开发中,数据验证是非常重要的一环,而 action-validator 就是一款可以帮助开发人员快速完成数据校验的 npm 包。本文将为大家详细讲解 action-validator 的使...

    2 年前
  • npm 包 bin-manager 使用教程

    在前端开发中,经常会使用到一些 npm 包来协助开发,而 npm 包 bin-manager 是一个非常实用的工具,它可以帮助我们快速管理项目中的命令行工具。 简介 bin-manager 是一个命令...

    2 年前
  • npm 包 gamecontroller 使用教程

    前言 gamecontroller 是一个基于 JavaScript 的 npm 包,它提供了一个易于使用的 API,帮助开发人员在浏览器中创建类似游戏手柄的控制器。

    2 年前

相关推荐

    暂无文章