npm 包 Jison 使用教程

阅读时长 7 分钟读完

介绍

Jison 是一个用于生成词法分析器和语法分析器的 JavaScript 库。它的设计灵活,因此可以用于构建任何类型的编译器或解释器。同时,它也可以用于构建更加高阶的自然语言处理工具。

本文将向你介绍 Jison 是什么以及如何使用它来创建自定义语言解释器。

Jison 的安装

在使用 Jison 之前,需要确保你已经安装了 Node.js 和 npm。

安装 Jison 依赖的命令如下:

这会将 Jison 安装到全局环境中,以便您可以在您的机器上全局使用 Jison 命令。

Jison 的使用

创建 Jison 文件

首先,在你的项目中创建一个新的 .jison 文件。这个文件将包含你的语法分析器的规则。例如,假设您想编写一个名为 "HelloWorld" 的编程语言,然后你可以创建 helloworld.jison 文件。

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

----
--

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

----

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

--

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

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

Jison 文件包含三个部分。

  1. %{...%}:这是一个 JavaScript 代码段,您可以在其中加载所需的 npm 包、定义全局变量等等。

  2. %lex.../lex:这是一个用于定义词法解析器规则的部分,可以使用正则表达式来匹配输入的文本流。

  3. %start...%%...:这是一个用于定义语法分析器规则的部分,其中 %start 定义了入口规则名称。其余的部分(以及紧随其后的 JavaScript 代码)定义了语法分析器规则。

编译 Jison

一旦你写完了 helloworld.jison 文件,下一步是使用 Jison 命令来生成解析器代码。方法如下:

这将生成 helloworld.js 文件,其中包含你创建的解析器代码。

使用 Jison

使用编译后的文件 helloworld.js 在您的应用程序中编写代码。例如,在 app.js(JavaScript 文件)中编写代码:

这将在控制台中打印出 "Hello World!"

使用 Jison 的示例代码

下面是一个更复杂的示例,该示例展示了如何使用 Jison 解析带有优先级和结合性的算术表达式。

创建一个 jcalc.jison 文件,如下所示:

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

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

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

------ ---

--

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

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

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

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

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

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

--

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

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

然后,只需要使用正常的 Node.js 模块导入该文件即可使用 Jison。

这将在控制台中打印出 ADD(1, MUL(2, 3))

结论

以上就是 Jison 包的一个简单介绍。在实际中,您可以考虑使用它来创建自定义的编程语言解释器。

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

纠错
反馈