Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java的AST构建器?_Java_Compiler Construction_Abstract Syntax Tree - Fatal编程技术网

Java的AST构建器?

Java的AST构建器?,java,compiler-construction,abstract-syntax-tree,Java,Compiler Construction,Abstract Syntax Tree,我正在手工构建一个AST树,用于我的应用程序。目前,我使用标准的OO方法在程序内存中存储了大量数据,这些数据将用于形成AST 我想知道是否已经有框架/代码生成器可以帮助我完成这项任务 我不是在找编译器。我不想定义语法,让代码生成器为我生成语法分析器。我打算自己实例化树的节点,我只是在寻找一种更快、更便宜的方法来构建.java文件本身(另外还有节点属性选项,可选的beginVisit()/endVisit()方法等)。我强烈建议您看看Eclipse的。它包括一个非常健壮的AST框架 我的理解是,使

我正在手工构建一个AST树,用于我的应用程序。目前,我使用标准的OO方法在程序内存中存储了大量数据,这些数据将用于形成AST

我想知道是否已经有框架/代码生成器可以帮助我完成这项任务


我不是在找编译器。我不想定义语法,让代码生成器为我生成语法分析器。我打算自己实例化树的节点,我只是在寻找一种更快、更便宜的方法来构建.java文件本身(另外还有节点属性选项,可选的
beginVisit()
/
endVisit()
方法等)。

我强烈建议您看看Eclipse的。它包括一个非常健壮的AST框架


我的理解是,使用此API,您可以访问各种类型的AST节点的所有属性,还可以使用
beginVisit()
endVisit()
方法创建访问者。

这似乎是问题的答案:

MPS的主要目标是允许扩展语言。这是因为 每种现有语言都已经定义了严格的语言语法, 这限制了它的灵活性

扩展语言语法的问题主要是文本 代码的表示。如果我们想使用 不同的语言扩展,每个扩展都有自己的语法

这自然导致了非文本呈现的概念 程序代码。这种方法的一个主要好处是它消除了 代码解析的需要。我们的解决方案是始终使用代码 在抽象语法树(AST)中维护,该树由节点组成 包含属性、子项和引用,并完全描述 程序代码

同时,MPS提供了一种有效的方法来保持代码的编写 像文字一样的方式

在创建语言时,定义代码编辑和编辑的规则 翻译您还可以指定语言类型和系统 限制。这使得MPS能够动态地验证程序代码,并且 因此,使用这种新语言编程变得简单和容易 容易出错

MPS采用生成性方法。您还可以为其定义生成器 他们的语言将自定义语言中的代码转换为可编译语言 用一些常规语言编写的代码。目前,国会议员们尤其关注这一问题 适用于但不限于生成Java代码。你也可以 生成XML、HTML、JavaScript等


你指的是JDT的哪个具体插件?@EngluseDelysium我猜它是()是的,@prunge是正确的,JDT核心就是你要寻找的。那么你知道你想要创建什么AST节点了吗?听起来你想要一个代码生成器,但是生成器必须运行一些输入。您有什么输入来描述所需的AST节点?如果您没有这样的输入,您如何期望生成器或框架帮助“构建.java”文件。(你说的Java文件是什么意思?)。所以我不明白你为什么认为这是对你原来问题的回答。MPS不会给我生成解析器。它将生成我可以在程序中使用的输出文件。