在c#中遍历JavaScript AST (Esprima.Net)到Tree

本文关键字:Net Esprima Tree AST 遍历 JavaScript | 更新日期: 2023-09-27 18:12:26

我用了Esprima。Net (https://github.com/Diullei/Esprima.NET)从JavaScript代码中获取AST(抽象语法键)。它返回一个包含许多子节点和子节点的List<Dynamic>。我想知道如何在c#中遍历所有这些节点以进行分析。基本上我想要得到函数名,变量名&它所处的函数。

例如,在下面的JavaScript代码中:

var y = 45;
function fTest(d)
{
   var key: Argument.Callee;
   var cars = 'Hello';
   for (i = 0; i < cars.length; i++) 
   { 
     text += cars[i];
   }
}

我希望在结尾得到以下结果:

variable: 45
function:parameter:'d'
function:variable:argument.callee
function:variable:'Hello'
funtion:loop:variable:object

我很难遍历Esprima.Net给出的List<Dynamic>。有什么想法来处理或遍历这个列表中的树或任何结构,以便我可以访问它们吗?谢谢。

在c#中遍历JavaScript AST (Esprima.Net)到Tree

我最终没有使用Esprima。. NET和Esprima JS (http://esprima.org/)。我在网页中添加了Esprima JS,并创建了一个名为Esprima解析器的外部javascript文件来创建AST。一旦我有了AST,我使用estraverse (https://github.com/estools/estraverse)来遍历AST以获得结果。

希望这对别人有帮助。

你可以使用Jint,它是。net中的一个JavaScript解释器,并且有一个Esprima (ES5)的内部端口。它返回与Esprima相同的AST。

或者你可以用另一个Esprima。