关于javascript解析的意见/建议
问题描述:
我需要一个机制,它将采取一个相当小的包含同步函数调用的JavaScript片段,并将其重写为异步JavaScript。关于javascript解析的意见/建议
因此,举例来说,如果我有一个片段
someSyncFunction();
console.log("function complete")
我需要重新格式化,以
someAsyncFunction(function() {console.log("function complete")});
这是一个任务我可以采取用正则表达式,或者我需要写解析器?如果后者,任何建议在任何库将有所帮助?
只是为了稍微的事情复杂化,我还需要处理递归/嵌套,如...
someSyncFunction();
console.log("first function complete");
someSyncFunction();
console.log("second function complete");
...
答
是的,你需要使用一个解析器。正则表达式不能真正解析任意嵌套的JavaScript代码。您可能会想要使用http://esprima.org/,它提供了一个语法树,您可以在其中找到异步函数并适当地转换树。
但是,我不认为你会想重新发明轮子。看看这个list of tools that compile synchronous to asynchronous JavaScript。
答
感谢您的建议。下面是结果...
- esprima肯定会做的工作,而这也正是如果正则表达式命中
- 我看着编译器的有用列表中https://github.com/jashkenas/coffeescript/wiki/List-of-languages-that-compile-to-JS#synchronous-to-asynchronous-javascript-compilers-cps缓冲区我会去下一个,但他们都为了我想要实现的目标而携带了很多行李。 Kal最接近
- 从@ Avinash的建议开始,我发现做我想要的正则表达式非常简单,所以这就是我要做的。为了澄清,http://regex101.com/r/dL0uQ2/1的正则表达式将处理sync-> async转换的单个实例,所以我会递归调用它直到输出稳定。
您需要更改多少javascript?如果可能的话,我会建议手动执行此操作,因为我认为解析/或使用正则表达式可能会充满复杂性。 – ne1410s 2014-09-01 15:48:25
片段将多达10行左右,不包括任何函数定义。 – pinoyyid 2014-09-01 15:50:14
我假设你有不同的同步功能?并且每个片段都与其他片段不同?我有点恐龙,所以我可能会坚持使用查找和替换在一个体面的文本编辑器,以及手动整理.. – ne1410s 2014-09-01 15:55:14