我如何使用JDT获取赋值语句的类型。 我正在遍历使用ASTVisitor的类文件,以找到以日期(日历)为类型的赋值实例。尽管我可以使用getType方法为VaraibleDeclarationStatement找到此类实例,但是Assignment节点没有这种方法。 解决方案如下: 该分配被分解为LHS和RHS,因此请检查RHS表达式的类型。

2020年11月16日 0条评论 31点热度 阅读全文

我想用源代码的AST表示形式创建一个XML文件,但是创建而不编译它。到目前为止,我找不到任何足够的解决方案。这是我尝试过的: 在clang中使用XML打印机-clang -cc1 -ast-print-xml-会很好,但它是removed from clang srcML工具箱,理论上运行良好,但解析器性能较差(对于Java,它甚至不完全与1.5兼容) 还有其他选择吗? 解决方案如下: 对于Java,请参见What would an AST (abstract syntax tree) for an object-…

2020年9月25日 0条评论 31点热度 阅读全文

我正在尝试将Java源代码转换为其他面向对象的编程语言。为此,我想遍历整个AST(由JavaParser生成),并收集Java源代码的每个组件,然后将它们相应地转换为我的目标语言。尽管我确实找到了有关查找特定节点(例如“类或接口声明”等)的信息,但在在线搜索中没有找到与遍历完整AST相关的任何信息。我​​们将不胜感激。 解决方案如下: 阅读完文档后,我意识到使用getChildNodes()函数将帮助我们从根节点到叶节点访问Java源代码AST的每个节点。

2020年8月15日 0条评论 45点热度 阅读全文

我想用源代码的AST表示形式创建一个XML文件,但是创建而不编译它。到目前为止,我找不到任何足够的解决方案。这是我尝试过的: 在clang中使用XML打印机-clang -cc1 -ast-print-xml-会很好,但它是removed from clang srcML工具箱,理论上运行良好,但解析器性能较差(对于Java,它甚至不完全与1.5兼容) 还有其他选择吗? 解决方案如下: 对于Java,请参见What would an AST (abstract syntax tree) for an object-…

2020年7月22日 0条评论 25点热度 阅读全文

我正在使用ASTParser解析项目中的Java源代码。我设法获得了Java项目不同类中所有方法的名称和返回类型。我现在想知道在main中的方法之间是否有依赖关系。实际上,我还没有阅读该类的所有文档,这有点复杂。您知道是否有可能对主程序中方法的互连性有个了解吗?如果不可能,是否可以使用其他API? 谢谢。 解决方案如下: 由于很难确定将调用哪些特定方法,因此已知该问题非常困难,因为Java允许覆盖大多数方法。在最坏的情况下,这是无法确定的,因此,您将能够获得的最好的结果是保守的近似值。因此,尽管许多研究论文都在一定…

2020年7月11日 0条评论 39点热度 阅读全文

我知道我可以使用explain extended command获得AST。我的问题是,如何使用Java API获得相同的信息。我的目标是获取有关查询的以下数据: 数据库源和目标(如果已应用)。 表源和目标(如果已应用)。 查询中涉及的字段。 我知道我可以使用Regex直接从查询字符串中获取上述数据,但是我想使用Java API。 您还有其他想法吗? 解决方案如下: 您可以为此使用Hive Parser。它只是简单地获取查询并将其转换为AST,这与explain命令类似。这是一个简单的示例: ParseDriver…

2020年7月9日 0条评论 55点热度 阅读全文

所以我有一个AbstractSyntaxTreeNode.java类(这是其中的一部分) public abstract class ASTreeNode implements Iterable<ASTreeNode>{ protected List<ASTreeNode> children; protected ASTreeNode(){ children = new LinkedList<ASTreeNode>(); } protected ASTreeNode(ASTree…

2020年6月27日 0条评论 28点热度 阅读全文

我正在寻找可用于以可读格式打印树的ANTLR语法。当我尝试打印Java.g(http://openjdk.java.net/projects/compiler-grammar/antlrworks/Java.g)时,结果不方便。但是我发现一个语法(包括Java项目),可以很好地打印AST。此语法是来自Marton Papp(http://www.antlr.org/grammar/1279217060704/pascal3.zip)的Pascal语法。 就像是: VARDECL text="Var" VARLIST…

2020年5月7日 0条评论 31点热度 阅读全文

因此,我花费了一整天的时间来弄清楚如何使用ANTLR。我有一堆Java源代码文件。我的目标是使用ANTLR为每个文件创建一个AST。最后,AST将转换为JSON,因此使用诸如python这样的动态语言来解析每个AST会更加容易。转换将使用此topic中的解决方案(尽管如果有人有更好的解决方案,我会很高兴听到)。我设法在getting-started页面中运行了基本示例。现在,我试图弄清楚如何为我的Java源代码文件之一创建AST。就像getting-started页中所说的那样,我可以使用Java grammar来…

2020年4月30日 0条评论 38点热度 阅读全文

我正在寻找一种方法来查找哪些MethodInvocation表达式利用了调用方方法声明的参数。 例如: public void caller(int param1, int param2){ m1(param1) m2(param2) m3(param1, m4(param2)) } 我希望能够确定m1方法调用使用了“ param1”,m2方法调用使用了“ param2”,而m3使用了“ param1”和“ param2”。我可以用ASTVisitor做到这一点吗?我没有运气,因为MethodDeclaration…

2020年4月17日 0条评论 28点热度 阅读全文