前言:
gulp-nearley 是一个将 .ne 文件编译成解析函数的库,可以轻松地在您的 gulp 构建中使用,提升前端代码的可读性和可维护性。在这篇文章中,我们将介绍如何使用 gulp-nearley。
基础要求
使用 gulp-nearley 需要以下三个包:
在安装这些包之前,请确保您已经安装了 Node.js。
安装
这三个包都可以在 npm 上找到。您可以使用以下命令安装:
npm install gulp nearley gulp-nearley --save-dev
代码创建
在项目根目录中创建一个名为 grammar
的文件夹(可根据自己喜欢的命名),并在其中创建用于编写您的语法文件 .ne
。
在该文件夹下创建 expression.ne
文件, 并在其中定义相应的语法:
-- -------------------- ---- ------- -------- --------------- ---------- -- ---------- --------- ------ --- -- ---- - ----------------- -------------- ------ ------ ----- -- - ------ ------ ------- --------- -- - ---------- --- - ------ ----- -- - - --- ------------- ------- ----- -- - - --- ------------- ------- ----- -- ---- -- ---- -------- -------- --- -- ---- - ----------------- -------------- ------ ------ ----- -- - -------- ------ ------- -------- -- - ---------- --- ------- ----- -- - - --- ------------- ------- ----- -- ------ -- ---- --- -------- ------ -------------- ------ -- - ------ ------ ----- -- ---- -- --- ---------- ----- ------ ----- -- - ----- -- ------ --- -- - -------- -- ------ ----------------- -- -- -- ------ ---- -- ------------
用法:
-- -------------------- ---- ------- - ------------- - ------------- - ------------------ ------ ------------- - -- ------- -- ------- ------- - - -- ------------ - --------------- ----- ------- ------------ -- ------- - ------------- ------------------ -------- ------------- - ----- - -- ----------- - ------------ --- ------- ------ -- --------- - ------------- -------------------------------------- ------------- - --------- -- ------- -- ------- -- ------- ------- - - -- ------- - --------------- ---- ------------- --- --- ------------------------ ---- -------- ------- ------------ -- ----- ---------- ------- ------------------------------------- -
完整示例代码:
-- -------------------- ---- ------- ---- ------- ----- ---- - --------------- ----- ------- - ------------------ ----- ----------- - ----------------------- ---------------------------- -- -- - ------ ----------------------------- -------------------- -------------------------- --
这将遍历您的 ./grammar
目录中的所有 .ne
文件,并将其编译到 ./dist
目录中。
为了使 gulp-nearley 能够识别您的语法,语法文件名必须以 .ne
结尾。如果要改变此默认设置,请提供 options.extension
选项。
gulpNearley({ extension: '.nearley' })
加载外部终结符
默认情况下,nearley 形式与 GNU Bison 形式相似,因为您必须在您的语法中定义所有使用的符号。这包括终结符和非终结符,但对于终结符,您不必定义表达式。
Expression -> "hello" World "!" World -> "world" | "everyone"
然后您可以使用以下代码在 JavaScript 中生成解析器:
const parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar)); parser.feed("hello world!");
然而,这只适用于自定义终结符。 如果您的项目中使用了比如 {{
和 }}
之类的自定义模板标记,则需要使用 options
中的 load
属性来告诉 nearley 如何加载这些标记。它可以是一个函数或一个对象(与 nearley 工具库 require
属性相同)。
gulpNearley({ load: { '{{': 'push("HANDLEBARS_START")', '}}': 'push("HANDLEBARS_END")', } })
使用加入 options 的方式将 HANDLEBARS_START 和 HANDLEBARS_END 作为运行时终结符。我们定义了两个字符串模式 {{
和 }}
和两个字符串模板 HANDLEBARS_START
和 HANDLEBARS_END
,接下来我们就可以在您语法之间轻松地搭建模板系统。例如:
Handlebars -> HANDLEBARS_START value HANDLEBARS_END {%=[d[1]]=%}
其中,HANDLEBARS_START 和 HANDLEBARS_END 已经在前面 options
中被定义,该语法仅解析包含表达式的 Handlebars 部分。需要注意的是,这只允许字符串标记。如果您需要解析更复杂的标记(比如 [=
,=
]),则可以使用 RegExp
(带有捕获的分组)。
总结
在本篇文章中,我们介绍了如何使用 npm 包 gulp-nearley 进行语法解析。通过使用 gulp-nearley 将语法文件编译成解析函数,可以提高前端代码的可读性和可维护性。此外,我们还介绍了如何加载外部终结符和自定义模板标记。我希望本篇文章对您有帮助!
参考
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055f9e81e8991b448dcf3d