问题标签 [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 投票
1 回答
74 浏览

esprima - 如何在 esprima 解析器上添加新语义?

我想使用esprima解析器来解析 mongo shell 脚本。基本上 mongo shell 使用 javascript 语法,但有一些额外的命令。例如,use testmongo shell 上的一条语句切换到test数据库。如果我把这个字符串放到esprima.parseScript我会得到一个异常,因为这不是一个有效的 javascript 代码。我想知道use testesprima解析器上添加一些新语义的最简单方法是什么。

0 投票
1 回答
374 浏览

javascript - 为什么 escodegen 和 esprima 在我的源代码上生成括号包装?

escodegen用来在我的语句中添加一个结束代码,如下所示。在 leave 方法中,我.toArray()在语句的末尾附加了一个调用。

上面代码的输出是:generated code: (db.find().toArray()). 我不明白为什么它在我的源代码上加上括号。我的源代码有什么问题吗?

0 投票
0 回答
74 浏览

javascript - 使用 Esprima 计算内在函数的出现次数

我正在开发一个允许用户提交的带有嵌入 JavaScript 代码的网页的应用程序。

我想通过构建常见 JavaScript 内在函数(内置对象)的映射来了解更多关于我的用户如何编写他们的 JavaScript 代码的信息,该映射显示用户生成的代码中每个内在函数的出现。

假设我有一个来自用户网页的 JS 文件:

主.js

我想要一个可以生成以下输出的脚本:

我尝试使用正则表达式和字符串遍历来做到这一点,但这并没有考虑到在迭代中使用项目的情况。简单的字符串遍历会给我带来:

这是不正确的。

Esprima 似乎为此提供了一个解决方案,因为它可以执行语法分析,因为它是一个 JS 解析器。我试图用来esprima.parseScript(input, config, delegate)生成一棵树而不是遍历树,但输出仍然没有考虑迭代。

这是我尝试使用 Esprima 解析此信息的输出:

我已经无法在 SO 上找到这个答案 - 这似乎是一个需要解决的有用问题,但需要对 Esprima 等词法分析工具有一些了解。

0 投票
3 回答
1006 浏览

javascript - 如何使用 acorn.js 或类似库向 ast 树添加新节点?

我试图使用 acorn.js 和 yeoman 将代码添加到现有的 js 文件中。我尝试使用 esprima 和 acorn 来完成这项工作,但我找不到任何关于将节点添加到 AST 的文档。

0 投票
0 回答
203 浏览

github - 加载完整的 github repo 文件树的最有效方法是什么?

我正在处理一个简单的网页(没有后端)。它提供了一些关于 repo 中 js 代码的基本统计信息。

使用场景:

  1. 用户将其身份验证令牌添加到<input/>
  2. 用户将 repo 根路径添加到另一个<input/>
  3. 用户点击<button/>加载文件
  4. window.fetch 检索从根目录开始的树。就像是: [{ name:'root', children:[ {name:'foo.js',contents:'<js code>'}, {name:'bar.js',contents:'<js code>'}, { name:'src', children:[ {name:'baz.js',contents:'<js code>'}, ...etc ] } ] }]
  5. Esprima 将这些<js code>部分解析为 AST 对象
  6. 其他代码从 AST 对象派生统计数据
  7. 该页面显示这些统计信息

我得到了一个基本的 GraphQL 查询,但它只加载一个树级别。我希望避免在多个请求上递归构建树的逻辑和复杂性。

如果它加载文件内容,Github 的 v3 递归树 API 会很棒。唉,它没有,而且 GraphQL api 还没有递归等效项。

网页加载 github repo 文件树内容的最有效方式是什么?使用 Github 的 API 的解决方案可以工作,如果存在其他更有效的方法也可以。

谢谢!

0 投票
1 回答
1450 浏览

javascript - 无法使用 Esprima/Acorn 解析函数:意外令牌“(”

我可以使用 Esprima 和 Acorn 解析箭头函数,但使用普通函数会出错:

有什么建议么?

0 投票
2 回答
3693 浏览

javascript - 如何将自定义 AST 转换为 JS 代码

我目前正在根据我设计的新语言规范生成自定义 AST。此自定义 AST 包含我设计的不同节点,其中包含我现在生成 JavaScript 代码所需的所有信息。例如:

假设我有一个 customExpressionNode,我希望将其转换为包含几个 if 条件的 JavaScript 函数。

我目前正在研究像 Babylon 和 Esprima 这样的库,以便从我的自定义 AST 生成新的 Javascript AST,但据我所知,这些库使用的 AST 非常复杂。我还想避免将js代码打印到几个文件中然后解析和编译它们,所以我的问题是:

有没有更好的方法以编程方式生成符合 JavaScript 的 AST,我可以使用它来生成 JavaScript 代码?

0 投票
1 回答
419 浏览

javascript - 从 ARROW 函数 (es6) 到 ES5

在我的 angularjs 应用程序中,我使用 esprima.js 验证和 gulp。现在,esprima 给我这两个 js 的错误。

错误:第 38843 行:意外的标识符

这是第一块

第二个是求和的过滤器

Esprima 版本是"version": "4.0.0",我发现我需要获取版本的instanbul 依赖"istanbul": "^1.0.0-alpha.2",我手动更改为版本1.0.0-alpha.2并调用npm i esprima。我这样做,但同样的错误被抛出。

有人知道如何解决这个问题吗?

0 投票
2 回答
465 浏览

reactjs - 无法将 esprima 与 ReactJS 一起使用 - 意外令牌

我正在尝试在 react js 中使用 esprima 解析函数参数。我收到以下错误

错误:第 1 行:意外令牌(▶ 9 个堆栈帧被折叠。App.render src/v4/EsprimaTest.js:12:29 9 | 10 | 11 | render() {

12 | 常量解析= esprimaFB.parse(this.sum.toString()) | ^ 13 | const parsed1=esprima.parse(this.sum.toString()) 14 | 返回 ( 15 | 查看编译

我的源代码如下。我尝试了 esprima 和 esprima-fb

0 投票
2 回答
82 浏览

javascript - 允许在客户端编写的 JavaScript 在服务器上执行的最安全方法是什么?

我想让我们的用户用 JavaScript 编写字符串解析逻辑,然后在服务器上执行。

编辑(更多信息)

  • 正则表达式不是他们需要的选项ifelse等等switch
  • 我想避免创建自定义语言
  • 这个想法是,如果用户知道 JS,他们可以编写自定义逻辑

我看过CodePen的Stopping Infinite Loops ,他们使用Esprima生成抽象语法树,然后重新生成我们使用Escodegen的 JavaScript 。这种方法让我担心的是,有人仍然可以引入某种 Unicode hack。