npm 包 pegts 使用教程

阅读时长 8 分钟读完

如果你正在开发一个需要解析复杂文本的前端应用,你最好使用 peg-ts 这个 npm 包。Peg-ts 是一种基于语法树的解析器生成器,用于处理文本的语法分析。

本教程将带你深入了解 peg-ts,并通过几个示例来提高你的技能。

安装

你可以通过 npm 安装 peg-t,命令如下:

用法

Peg-ts 处理解析的方法与正则表达式相似。首先你需要定义一个语法文件,然后使用 peg-ts 解析器将其转换为解析器,最后使用解析器解析给定的文本。

以下是一个基本示例:

Grammar 文件:

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

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

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

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

解析器示例:

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

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

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

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

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

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

这个示例中,我们定义了一个简单的数学表达式语言的文法。我们使用解析器生成器创建了一个解析器,然后使用 parser.parse() 方法来解析一个表达式。

实战示例

解析 JSON 字符串

我们可以使用 peg-ts 来解析 JSON 字符串。下面是一个 JSON 字符串的语法:

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

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

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

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

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

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

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

解析器代码:

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

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

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

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

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

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

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

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

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

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

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

在此示例中我们定义了一个 JSON 对象的语法。我们定义了整数、浮点数、字符串、对象、数组、布尔型和 null 类型的值的语法。

解析自定义文件格式

下面这个示例是一个用于解析某种自定义文件格式的解析器。

文法文件:

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

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

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

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

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

解析器代码:

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

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

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

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

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

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

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

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

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

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

在此示例中,我们定义了一种自定义格式的文本文件。在文件的一开始,我们有一个头部,然后有一些使用 TEXTLINECONTROLLINE 指定的行。在文件的结尾,我们有一个脚注。通过解析该文本文件,我们可以为每个行分别获取行号和文本内容。

至此,便介绍了 peg-ts 的基础用法,具体内容可以参考官方文档进行更多深入学习。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60057c5981e8991b448ebd9b

纠错
反馈