问题标签 [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.
javascript - 如何使用 BabelJS 将自定义运算符添加到 Javascript 或 node.js?
我想向 Javascript 添加自定义运算符、关键字和语法。
多年前有人寻求帮助并得到了一些很好的指示:
在这里实现:
https://github.com/IonicaBizau/js-custom-operators
此方法不适用于最新版本的esprima.js
.
这可能babel.js
吗?
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 的链接)、可重现的错误报告,诸如此类。
我应该提到到目前为止我自己进行的速度测试:
node.js - 如何使用全局 nodejs 模块?
尝试使用 esprima 时出现以下错误。有谁知道如何解决这个问题?谢谢。
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
欢迎任何想法,指向开源项目。
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 代码:
但是,我收到以下异常:
javascript - 使用 ESPIRMA 生成 JS AST 时忽略错误
即使 JS 文件有语法错误,如何指示 esprima 继续生成 AST?
例子:
正常的 esprima 输出(即使启用容错模式):
描述:'意外的令牌;'
reactjs - 在 npm install 中找不到 Esprima 错误 404
我正在尝试在我的 react 项目中安装所有依赖项,但是当我运行 npm install 时,我遇到了一些与 esprima 相关的错误:
有没有人遇到过这个错误?
javascript - 使用 Esprima 检测缺少的分号解析 JavaScript
我正在使用esprima
andestraverse
模块对 JavaScript 代码进行静态分析。由于 JavaScript 不强制使用分号,因此在分析没有分号的代码时不会引发错误,但我希望这样做。
我想出的唯一解决方案是查找可能需要分号的表达式并检查是否有,但该esprima.parse
函数不记得任何分号的存在。标记化后它们似乎被忽略了。
所以,简而言之:有没有办法在使用 esprima 对 javascript 代码进行静态分析时检测丢失的分号?