问题标签 [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.
esprima - 如何在 esprima 解析器上添加新语义?
我想使用esprima
解析器来解析 mongo shell 脚本。基本上 mongo shell 使用 javascript 语法,但有一些额外的命令。例如,use test
mongo shell 上的一条语句切换到test
数据库。如果我把这个字符串放到esprima.parseScript
我会得到一个异常,因为这不是一个有效的 javascript 代码。我想知道use test
在esprima
解析器上添加一些新语义的最简单方法是什么。
javascript - 为什么 escodegen 和 esprima 在我的源代码上生成括号包装?
我escodegen
用来在我的语句中添加一个结束代码,如下所示。在 leave 方法中,我.toArray()
在语句的末尾附加了一个调用。
上面代码的输出是:generated code: (db.find().toArray())
. 我不明白为什么它在我的源代码上加上括号。我的源代码有什么问题吗?
javascript - 使用 Esprima 计算内在函数的出现次数
我正在开发一个允许用户提交的带有嵌入 JavaScript 代码的网页的应用程序。
我想通过构建常见 JavaScript 内在函数(内置对象)的映射来了解更多关于我的用户如何编写他们的 JavaScript 代码的信息,该映射显示用户生成的代码中每个内在函数的出现。
假设我有一个来自用户网页的 JS 文件:
主.js
我想要一个可以生成以下输出的脚本:
我尝试使用正则表达式和字符串遍历来做到这一点,但这并没有考虑到在迭代中使用项目的情况。简单的字符串遍历会给我带来:
这是不正确的。
Esprima 似乎为此提供了一个解决方案,因为它可以执行语法分析,因为它是一个 JS 解析器。我试图用来esprima.parseScript(input, config, delegate)
生成一棵树而不是遍历树,但输出仍然没有考虑迭代。
这是我尝试使用 Esprima 解析此信息的输出:
我已经无法在 SO 上找到这个答案 - 这似乎是一个需要解决的有用问题,但需要对 Esprima 等词法分析工具有一些了解。
javascript - 如何使用 acorn.js 或类似库向 ast 树添加新节点?
我试图使用 acorn.js 和 yeoman 将代码添加到现有的 js 文件中。我尝试使用 esprima 和 acorn 来完成这项工作,但我找不到任何关于将节点添加到 AST 的文档。
github - 加载完整的 github repo 文件树的最有效方法是什么?
我正在处理一个简单的网页(没有后端)。它提供了一些关于 repo 中 js 代码的基本统计信息。
使用场景:
- 用户将其身份验证令牌添加到
<input/>
- 用户将 repo 根路径添加到另一个
<input/>
- 用户点击
<button/>
加载文件 - 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 ] } ] }]
- Esprima 将这些
<js code>
部分解析为 AST 对象 - 其他代码从 AST 对象派生统计数据
- 该页面显示这些统计信息
我得到了一个基本的 GraphQL 查询,但它只加载一个树级别。我希望避免在多个请求上递归构建树的逻辑和复杂性。
如果它加载文件内容,Github 的 v3 递归树 API 会很棒。唉,它没有,而且 GraphQL api 还没有递归等效项。
网页加载 github repo 文件树内容的最有效方式是什么?使用 Github 的 API 的解决方案可以工作,如果存在其他更有效的方法也可以。
谢谢!
javascript - 无法使用 Esprima/Acorn 解析函数:意外令牌“(”
我可以使用 Esprima 和 Acorn 解析箭头函数,但使用普通函数会出错:
有什么建议么?
javascript - 如何将自定义 AST 转换为 JS 代码
我目前正在根据我设计的新语言规范生成自定义 AST。此自定义 AST 包含我设计的不同节点,其中包含我现在生成 JavaScript 代码所需的所有信息。例如:
假设我有一个 customExpressionNode,我希望将其转换为包含几个 if 条件的 JavaScript 函数。
我目前正在研究像 Babylon 和 Esprima 这样的库,以便从我的自定义 AST 生成新的 Javascript AST,但据我所知,这些库使用的 AST 非常复杂。我还想避免将js代码打印到几个文件中然后解析和编译它们,所以我的问题是:
有没有更好的方法以编程方式生成符合 JavaScript 的 AST,我可以使用它来生成 JavaScript 代码?
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
。我这样做,但同样的错误被抛出。
有人知道如何解决这个问题吗?
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
javascript - 允许在客户端编写的 JavaScript 在服务器上执行的最安全方法是什么?
我想让我们的用户用 JavaScript 编写字符串解析逻辑,然后在服务器上执行。
编辑(更多信息):
- 正则表达式不是他们需要的选项
if
,else
等等switch
- 我想避免创建自定义语言
- 这个想法是,如果用户知道 JS,他们可以编写自定义逻辑
我看过CodePen的Stopping Infinite Loops ,他们使用Esprima生成抽象语法树,然后重新生成我们使用Escodegen的 JavaScript 。这种方法让我担心的是,有人仍然可以引入某种 Unicode hack。