【问题标题】:Example of how to use PEG.js如何使用 PEG.js 的示例
【发布时间】:2020-06-15 14:01:30
【问题描述】:

我在玩PEG.js

我创建了一些接受 [LettersNumbers] 形式的输入的简单代码:

  • abc123
  • 你好98765

这是代码:

start = expression 

expression = text + number

text = 
a: [a-z]+
{return a.join("");}

number = 
b:[0-9]+
{return b.join("");}

这里:Online version 可以测试代码并下载解析器,另外我下载了peg.js 本身。

不幸的是,documentation 非常稀疏。我试过了:

<script src="peg-0.9.0.min.js"></script>
<script src="parser.js"></script>
<script>
var parser = new PEG;
parser.parse("test123");
</script>

但出现以下错误:

未捕获的引用错误:未定义模块
未捕获的 TypeError:PEG 不是函数

谁能给我一个工作示例?我只需要将生成的 js 文件集成到网站中。

【问题讨论】:

    标签: javascript peg pegjs


    【解决方案1】:

    此答案假定您希望继续使用 PEG.js 在线版本来构建您的解析器。

    如果您在网页中生成解析器,您只需要peg-0.9.0.min.js。由于您使用的是 PEG.js 在线版本来生成解析器,因此您不需要这样做。

    您确实需要包含下载的parser.js。您需要在 PEG.js 网页版中指定一个浏览器友好的全局变量并重新下载。

    本例使用PARSER:

    以下你可以使用:

    <script src="parser.js"></script>
    <script>
    PARSER.parse("test123");
    </script>
    

    Plunker example

    【讨论】:

    • “浏览器友好的全局变量”是什么意思? “module.exports”和“window.PARSER”的区别在哪里?
    • @joews 添加了plunker example。介意我将其添加到您的答案中吗?
    • @user1170330,生成的解析器代码会尝试将自己暴露给其他人可以看到的东西,在node.js,我们使用module.export = XXX让其他库能够获取var XXX = require('./parser'),但是在浏览器中,没有这样的模块语法,所以生成器只是使用window.PARSER = XXX 使其他脚本能够使用var parser = PARSER 来获取它。
    • @fuyushimoya:谢谢!那么您和 joews 的示例之间有什么区别需要考虑吗?例如。安全等。在您的示例中,整个语法都是可见的,这可能是个问题吗?
    • 不,可以从 devtool 轻松查看 parser.js。不同之处在于 joews' 为您提供了一个已经可用的解析器,而我的需要从给定的语法构建,并让您能够构建不同的语法,如果您只有一个语法,joews' 会更好用。跨度>
    【解决方案2】:

    如果你想在网页上使用它,你需要下载browser version,或者从CDN引用它。

    另外,您需要使用它的javascriptAPI 来创建解析器。

    // One line version of your grammer.
    var parser = PEG.buildParser('start = expression;expression = text + number;text = a: [a-z]+{return a.join("");};number = b:[0-9]+{return b.join("");}');
    
    console.log(parser.parse("test123"));
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/pegjs/0.7.0/peg.min.js"&gt;&lt;/script&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-06
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多