问题标签 [esprima]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
125 浏览

javascript - 如何使用 BabelJS 将自定义运算符添加到 Javascript 或 node.js?

我想向 Javascript 添加自定义运算符、关键字和语法。

多年前有人寻求帮助并得到了一些很好的指示:

我将如何扩展 JavaScript 语言以支持新的运算符?

在这里实现:

https://github.com/IonicaBizau/js-custom-operators

此方法不适用于最新版本的esprima.js.

这可能babel.js吗?

0 投票
4 回答
744 浏览

javascript - 转译器之战:突破嵌套函数,有 vs 无 throw

我刚刚完成了我的第一个(玩具)转译器的“版本 0”。有用。它将一串“伪 JavaScript”(具有附加功能的 JavaScript)转换为一串可运行的 JavaScript。现在,我想改进它。

其他 SO 用户可能最感兴趣的工作领域是:编译后的代码(即我的转译器的输出)不注意编码风格建议,如对一些较早的 SO 问题的接受答案中给出的。如果我手头有第二个转译器,该编码风格建议得到重视,我可以就哪个分支更有希望继续开发做出明智的决定——我想比较这两个分支的性能、开发时间需要,错误的数量等,并据此决定。

让我告诉你我的转译器处理的“附加 JS 功能”:“嵌套返回”。考虑像这样的闭包/嵌套函数

(请注意,上面的 '...code...' 应该包括所有可能的 JS 代码,包括更多的嵌套函数声明,因此myOuterFunc不一定是 的直接父级innerFunc

在上述情况下,假设您希望从myOuterFunc内部某处返回结果- 不一定直接在内部 -innerFunc

实现“嵌套返回”后,您可以简单地编写

这是使用此功能并做一些有意义的事情的(不可运行的)函数的示例

这是我的转译器自动生成的(可运行的)代码(显然,注释是稍后添加/删除的),然后是一些代码测试该函数是否完成了它声称的工作(并且确实如此,你可以说服自己。 )

你可以在这里玩我的这个小提琴中的转译器。我正在使用esprima 库esprima之上的 escodegen.js 库,这是我自己的一个正在进行中的微小的抽象语法树生成库(请参阅小提琴中的脚本标签)。不是库的代码,也不是 UI 代码,即转译器的“真肉”只有不到 100 行(见函数transpile)。所以这可能没有你想象的那么复杂。

我不记得我在哪里看到过风格推荐,但我可以肯定它实际上在多个地方。如果您知道或遇到这样一个问题,我邀请您将链接放入问题下方的评论中,我将标记为有用。到目前为止,只有一个链接,谢谢 Barmar。

你可能会问为什么我什至费心先写一个“不合规”的转译器,而不是马上去写“合规”的版本。这与估计的工作量有关。我估计“合规”版本的工作量要大得多。如此之多,以至于开始这样的努力似乎并不值得。我很想知道这种对工作量的评估是正确的还是错误的。因此问题。请不要暗示问题的修辞,甚至是不诚实的动机;不管对某些人来说听起来多么奇怪,我确实希望被证明是错误的,所以请不要以为我出于任何原因“只是这么说”,你会对我做一个不公正。这是,到目前为止,我投入最多的工作。而且,如果你问我,这是迄今为止我在这里问过的最好的问题。

除了有人帮助我编写转译器的“合规”版本之外,我还对任何客观可证明的东西感兴趣(尽管程度较低)有机会说服我“不合规”的方式是错误的方法。速度测试(带有 jsperf 的链接)、可重现的错误报告,诸如此类。

我应该提到到目前为止我自己进行的速度测试:

第一次测试第二次测试

松散相关的问题

0 投票
1 回答
130 浏览

node.js - 如何使用全局 nodejs 模块?

尝试使用 esprima 时出现以下错误。有谁知道如何解决这个问题?谢谢。

0 投票
1 回答
142 浏览

javascript - 为什么 esprima 在在线浏览器演示中运行良好,但在本地失败

当我尝试使用以下脚本解析一段代码时,它失败了(使用 esprima@4.0.1)。然而,它在 esprima 在线浏览器演示中运行良好,如下面的屏幕截图所示。

在此处输入图像描述

输出错误信息如下:

0 投票
0 回答
54 浏览

abstract-syntax-tree - 如何在 AST 中生成所有叶到叶路径?

给定一个 JS 片段,如何从 AST 生成所有叶到叶路径?

假设代码片段是:

var answer = 6 * 7;

示例 AST:https ://esprima.org/demo/parse.html

对于这个代码片段,我必须生成从叶子到叶子的所有路径。我可以使用任何解析器,例如 esprima、acorn 或任何其他解析器。

我也很高兴使用 python 解析器https://github.com/Kronuz/esprima-python

欢迎任何想法,指向开源项目。

0 投票
1 回答
323 浏览

javascript - 如何使用 esprima 解析来自 Java 的 javascript 文件?

我的要求是解析一个 javascript 文件并以 json 格式获取 AST(抽象语法树)。esprima.parseScript() 函数接受 js 代码并正确生成 AST。但是,如何使用 esprima 从不同的 js 文件中读取 js 代码并进行解析呢?我需要能够从 Java 类调用 js 函数。

我尝试在 Java 中读取我想要解析的 js,并将其作为输入传递给函数。但是,下面的代码给出了一个例外。

解析器.js:

需要解析的js,example.js: function temp(){ return 5;}

用于读取 example.js 并将其作为参数传递给 parsejs 函数的 Java 代码:

但是,我收到以下异常:

0 投票
1 回答
40 浏览

javascript - 使用 ESPIRMA 生成 JS AST 时忽略错误

即使 JS 文件有语法错误,如何指示 esprima 继续生成 AST?

例子:

正常的 esprima 输出(即使启用容错模式):

描述:'意外的令牌;'

0 投票
1 回答
608 浏览

reactjs - 在 npm install 中找不到 Esprima 错误 404

我正在尝试在我的 react 项目中安装所有依赖项,但是当我运行 npm install 时,我遇到了一些与 esprima 相关的错误:

有没有人遇到过这个错误?

0 投票
1 回答
110 浏览

javascript - 无法在 webpackUniversalModuleDefinition 设置未定义的属性“esprima”

我收到此错误:

未捕获的类型错误:无法在 esprima.js:12 的 webpackUniversalModuleDefinition (esprima.js:11) 处设置未定义的属性“esprima”

尝试加载 Web 应用程序时:

截屏

错误发生在这里:

作为参考,该文件webpack.config.js是:

谁能提供线索可能出了什么问题?

0 投票
0 回答
15 浏览

javascript - 使用 Esprima 检测缺少的分号解析 JavaScript

我正在使用esprimaandestraverse模块对 JavaScript 代码进行静态分析。由于 JavaScript 不强制使用分号,因此在分析没有分号的代码时不会引发错误,但我希望这样做。

我想出的唯一解决方案是查找可能需要分号的表达式并检查是否有,但该esprima.parse函数不记得任何分号的存在。标记化后它们似乎被忽略了。


所以,简而言之:有没有办法在使用 esprima 对 javascript 代码进行静态分析时检测丢失的分号?