1

我只是在查看 Rhino 的 AST 部分来解析 JS 文件以检索所有函数名称。我遇到的问题是这些函数都是变量的子元素(声明或初始化程序不确定它们都具有相同类型的整数,但您不能将声明转换为初始化程序)。

所以脚本是这样的:

  var myFuncs = {
       foo:function(){....}
       bar:function(){
          getFooBar:function(){
            var foobar = function(){};
            return foobar;
          }
       }
    }

 var somethingElse= {}

我的问题是如何获取 myFuncs 变量/对象中包含的所有函数的列表;

我还没有看到关于 Rhino AST 的非常好的文档,也许我在某个地方遗漏了一些东西,但我所拥有的只是 Java Doc,它在某些地方非常不完整。如果有人有一个很好的链接到使用 Rhino AST 的教程,如果答案不简单,我将不胜感激。

这是我的解析代码

CompilerEnvirons compilerEnvirons = new CompilerEnvirons();
compilerEnvirons.setRecordingComments(true);
compilerEnvirons.setRecordingLocalJsDocComments(true);
compilerEnvirons.setStrictMode(true);

File scriptFile = new File("C:/myJsFile.js");
FileReader fr = new FileReader(scriptFile);
AstNode astNode = new Parser(compilerEnvirons).parse(fr, null, 1);
AstRoot astRoot = astNode.getAstRoot();

使用 astRoot 我尝试了各种 get 语句,例如 getSymbols() getStatements() 和 getFunctions() 但这些并没有给我想要达到的功能。

我也尝试使用 NodeVisitor 进行访问,但是在查找函数时,这给了我文档中唯一不在变量中的函数,因此没有任何嵌套在我正在寻找的变量中。如果我访问变量,我可以找到 VariableDeclaration/Initializers 但我无法获取变量的名称来检查我是否有 myFuncs var。真的很难走过这个结构。谢谢阅读。

4

1 回答 1

0

遍历 ASTNode,查找FunctionDeclaration并使用它的 getName() 来获取标识符。

于 2020-05-14T06:08:26.263 回答