标签: abstract-syntax-tree

Eclipse抽象语法树差异

在Eclipse中给出以下代码:

import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTParser;
import org.eclipse.jdt.core.dom.CompilationUnit;

public class Question {
    public static void main(String[] args) {
        String source = "class Bob {}";
        ASTParser parser = ASTParser.newParser(AST.JLS3); 
        parser.setSource(source.toCharArray());
        CompilationUnit result = (CompilationUnit) parser.createAST(null);

        String source2 = "class Bob {public void MyMethod(){}}";
        ASTParser parser2 = ASTParser.newParser(AST.JLS3); 
        parser2.setSource(source2.toCharArray());
        CompilationUnit result2 = (CompilationUnit) parser2.createAST(null);
    }
}
Run Code Online (Sandbox Code Playgroud)

您如何使用Eclipse Compare API(org.eclipse.compare)来查找AST差异?(这可以在插件之外完成吗?)

我正在查看以下API

http://kickjava.com/src/org/eclipse/compare/structuremergeviewer/Differencer.java.htm http://kickjava.com/src/org/eclipse/jdt/internal/ui/compare/JavaStructureCreator.java.htm http://kickjava.com/src/org/eclipse/compare/CompareUI.java.htm

任何人都可以指向示例代码(或API - 但代码是首选).

java eclipse diff abstract-syntax-tree compilationunit

4
推荐指数
1
解决办法
4397
查看次数

如何从java编译器树api生成注释生成的ast?

我已经使用java编译器树api为java源文件生成ast.但是,我无法访问源文件中的注释.

到目前为止,我一直无法找到从源文件中提取注释的方法..有没有办法使用编译器api或其他工具?

java compiler-construction abstract-syntax-tree

4
推荐指数
2
解决办法
4480
查看次数

VariableDeclarationFragment 节点resolveBindind() 在eclipse/jdt/ast 中返回null

我正在尝试按照这篇文章尝试 eclipse jdt/ast 。

这是作为输入的java代码:

class Hello
{
    int hello()
    {
        int a = 0, b = 3;
        /* hello */
        {
            b = a * 3;
        }
        return a;
    }
    public static void main(String[] args)
    {   
        int z = 0, i = 3;
        /* hello */
        {
            i = z * 3;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用ASTView,显示VariableDeclarationFragment有对应的绑定。 在此处输入图片说明

然而,在这个访问者代码中VariableDeclarationFragment node,我总是得到 4 个局部变量 (a,b,z,i) 的空值作为resolveBinding()返回值。

这有什么问题?我使用日食靛蓝。

在此处输入图片说明

这是获取 AST 的代码

private static CompilationUnit createCompilationUnit(String sourceFile) …
Run Code Online (Sandbox Code Playgroud)

java eclipse abstract-syntax-tree eclipse-jdt

4
推荐指数
1
解决办法
1748
查看次数

使用 AST 中的 c# 制作真正的解释器

我知道还有其他关于编译器/解释器技术的问题,以及像IronPython侏罗纪这样的非常好的代码可以学习。对我来说很清楚如何从源代码构建 AST(抽象语法树),编写一个顶级解析器(目前我更喜欢编写而不是使用代码生成工具)。

当用作解释器时,我试图研究的大多数来源使用 Reflection.Emit 等 API 即时编译程序。现在我想知道构建一个不编译为 .NET VM 源的真正解释器的最佳实践。

获得 AST 后如何执行代码?我应该使用解释器还是访问者设计模式?或者做一些不同的事情?什么是最好的或规范的方式?

我知道已经有这样问题,但如果可能的话,我喜欢更多信息,更具体地针对 .NET/C# 实现。

问候, 贾科莫

c# interpreter abstract-syntax-tree

4
推荐指数
1
解决办法
895
查看次数

用于scala的JavaScript源代码生成库

我在scala中寻找一个从抽象语法树生成JavaScript的库.我想在最终生成JavaScript的编译器中使用它,我不想自己实现漂亮的打印部分.

javascript code-generation scala abstract-syntax-tree

4
推荐指数
1
解决办法
751
查看次数

JS:重命名变量以进行重构(使用 AST,而不是文本)

我经常需要在重构代码时重命名变量,我目前使用正则表达式以一种有点hacky的方式进行 - 由于缺乏实际结构,我最终不得不使用愚蠢的文本解决方法,例如,将“req”重命名为“request”并避免类似名称的副作用,如“需要”。

想想这些东西:这有点像用正则表达式修改 DOM:它不起作用。

我了解了 AST 和 Esprima 等代码结构修改工具。是否有重命名变量的工具,基于 Esprima 或其他?

javascript refactoring parsing abstract-syntax-tree

4
推荐指数
1
解决办法
2990
查看次数

在antlr4中构建AST

我想知道我们是否可以使用Antlr版本4构建AST.我找不到使用antlr4构建它的任何参考.一个SO答案说,使用只生成解析树的antlr4很容易,但我的问题是效率如何呢?

它迫使我们抓取整个解析树而不是抽象语法树,这不是遍历整个树并使用访问者执行任务的有效方式.

antlr abstract-syntax-tree antlr4

4
推荐指数
1
解决办法
3536
查看次数

来自ANTLR Parse Tree的Python AST?

我发现了一个ANTLRv4 Python3语法,但它生成了一个解析树,它通常有许多无用的节点.

我正在寻找一个已知的包从该解析树中获取Python AST.

这样的事情存在吗?

编辑:澄清使用Python ast包:我的项目是Java,我需要解析Python文件.

编辑2:'AST'我的意思是http://docs.python.org/2/library/ast.html#abstract-grammar,而'解析树'我的意思是http://docs.python.org/2 /reference/grammar.html.

python abstract-syntax-tree parse-tree antlr4

4
推荐指数
2
解决办法
2971
查看次数

将引用的elixir代码转换为代码字符串

我有一种情况,我期待一些引用的灵药代码是一个原子.如果传入错误的引用代码我想引发错误并显示错误代码是什么.

最简单的方式来展示我需要的是一个例子.

quoted_code = quote do: %{}
"%{}" = some_func(quoted_code)
Run Code Online (Sandbox Code Playgroud)

metaprogramming elixir abstract-syntax-tree

4
推荐指数
1
解决办法
261
查看次数

模式匹配中的OCaml多态变体

我正在通过AST变换开发一种小型编程语言.也就是说,从VM开始并慢慢添加帮助程序员的层.

由于每个层都知道如何转换它的新类型,我做了类似这样的事情:

module AST0 = struct

  type t = [
    | `Halt
    | `In
    | `Out
    | `Add of (int * int * int)
    | `Sub of (int * int * int)
  ]

  let lower (ast : t list) = ast
end

module AST1 = struct
  type t = [
    AST0.t

    | `Inc of int
    | `Dec of int 
    | `Cmp of (int * int * int)
  ]

  let lower (ast : t list) =
    let lower_one = function
      | …
Run Code Online (Sandbox Code Playgroud)

ocaml pattern-matching abstract-syntax-tree

4
推荐指数
1
解决办法
505
查看次数