2015:用于分析 Java 源代码的标记语言(JavaML 不起作用)
2015: Markup Language for Analyzing Java Source Code (JavaML not working)
问题:
您是否知道有一种工具可以在没有太多兼容性问题的情况下工作,可以在 Java 源代码上进行标记并保持程序的大部分完整性,或者您知道如何制作 JavaML/JavaML 2.0工作?
理想情况下,该工具应该能够处理许多项目或编写脚本来处理许多项目。
解释:
我正在尝试对大量 Java 源代码(大约 20.000 个项目)进行研究。本质上,为了让我的研究能够给出任何类型的结果,我需要能够识别源代码中的注释和代码的不同部分,例如,我需要能够区分函数声明、函数调用、变量声明、变量使用, if 块等等。 - 其核心:JavaML(Java 标记语言)的作用。
示例:
import java.applet.*; // do not forget this import statement!
import java.awt.*; // Or this one for the graphics!
public class FirstApplet extends Applet {
// this method displays the applet.
// the Graphics class is how you do all the drawing in Java
public void paint(Graphics g) {
g.drawString("FirstApplet", 25, 50);
}
}
变为:
<java-source-program>
<java-class-file name="FirstApplet.java">
<import module="java.applet.*"/>
<import module="java.awt.*"/>
<class name="FirstApplet" visibility="public" line="5" col="0" end-line="11" end-col="0" comment="// do not forget this import statement!// Or this one for the graphics!">
<superclass name="Applet"/>
<method name="paint" visibility="public" id="FirstApplet:mth-15" line="8" col="2" end-line="10" end-col="2" comment="// this method displays the applet.// the Graphics class is how you do all the drawing in Java">
<type name="void" primitive="true"/>
<formal-arguments>
<formal-argument name="g" id="FirstApplet:frm-13">
<type name="Graphics"/>
</formal-argument>
</formal-arguments>
<block line="8" col="32" end-line="10" end-col="2" comment="// do not forget this import statement!// Or this one for the graphics!// this method displays the applet.// the Graphics class is how you do all the drawing in Java">
<send message="drawString">
<target>
<var-ref name="g" idref="FirstApplet:frm-13"/>
</target>
<arguments>
<literal-string value="FirstApplet"/>
<literal-number kind="integer" value="25"/>
<literal-number kind="integer" value="50"/>
</arguments>
</send>
</block>
</method>
</class>
</java-class-file>
</java-source-program>
但是问题来了。我一直在努力让 JavaML and JavaML 2.0 工作。但是存在一些相当明显的兼容性问题。我已经为 JavaML 尝试了 运行ning 新旧 ubuntu 实现的虚拟机(10.04、12.04 和 14.04),试图按照 [=66= 的指示编译源代码]ML 的网站,对于我在配置时不断遇到的所有版本,JavaML 中使用的 Jikes 版本似乎存在问题,这会触发 g++ 编译器的问题。 - 使用较新版本的 Jikes 会使来自 JavaML 的补丁变得毫无价值,因此无法编译 JavaML。
对于 JavaML 2.0,它带有一个 .exe 文件,可以 运行 在 windows 上。您只需要使用 Java 安装的正确路径进行设置(有关说明,请参见下文)。然而,这也给我带来了问题。使用最新的 Java (1.8.0_40) 它会告诉我:'chaos: CODE "15" is an invalid tag !!!'
当我使用 Java 版本设置它时: 1.5.0_14 、 1.5.0_12 、 1.5.0 、 1.4.2_19 和 1.3.1_28 。 exe 文件会崩溃,但首先会生成一个 .tok 文件和一个空的 .xml 文件。
JavaML 2.0
说明
- 下载 JavaML 2.0 项目
- 提取到某处
- 启动您的 cmd(命令提示符)
- 导航到您放置 JavaML 2.0 项目的文件夹
- 找到您的 Java 实现(通常存储在:C:\Program Files (x86)\Java)
- 找到您的 rt.jar 文件(通常存储在:C:\Program Files (x86)\Java\jre1.8.0_40\lib\rt.jar)
- 在您的 cmd 中写入以下行
s*
set CLASSPATH=.;C:\Program Files (x86)\Java\jre1.8.0_40\lib\rt.jar
jikes +B +L +c +T=3 +ulx FirstTest.java
如果有人仍在寻找这个问题,我想确保有某种答案。
在我的研究中,我找不到充当 JavaML 的工具,而且我无法让 JavaML 在任何较新的系统上工作。相反,我在 Java 中创建了自己的工具,这让我很头疼,而且它肯定不值得发布。手工创建这样一个工具花了我大约 30 个工时。
如果你真的需要一个类似JavaML的工具,我建议你自定义一个解析器,immibis也建议。
朋友叫我去看看OpenJDK compiler, and customize it. There is a guide to customization of the compiler found here。
- 然而,对于深入了解语言、语法和编译器的人来说,这是一项任务。
祝你好运。
使用 JavaCC 创建自定义解析器。他们已经有分析 Java 代码的示例。
问题:
您是否知道有一种工具可以在没有太多兼容性问题的情况下工作,可以在 Java 源代码上进行标记并保持程序的大部分完整性,或者您知道如何制作 JavaML/JavaML 2.0工作?
理想情况下,该工具应该能够处理许多项目或编写脚本来处理许多项目。
解释: 我正在尝试对大量 Java 源代码(大约 20.000 个项目)进行研究。本质上,为了让我的研究能够给出任何类型的结果,我需要能够识别源代码中的注释和代码的不同部分,例如,我需要能够区分函数声明、函数调用、变量声明、变量使用, if 块等等。 - 其核心:JavaML(Java 标记语言)的作用。
示例:
import java.applet.*; // do not forget this import statement!
import java.awt.*; // Or this one for the graphics!
public class FirstApplet extends Applet {
// this method displays the applet.
// the Graphics class is how you do all the drawing in Java
public void paint(Graphics g) {
g.drawString("FirstApplet", 25, 50);
}
}
变为:
<java-source-program>
<java-class-file name="FirstApplet.java">
<import module="java.applet.*"/>
<import module="java.awt.*"/>
<class name="FirstApplet" visibility="public" line="5" col="0" end-line="11" end-col="0" comment="// do not forget this import statement!// Or this one for the graphics!">
<superclass name="Applet"/>
<method name="paint" visibility="public" id="FirstApplet:mth-15" line="8" col="2" end-line="10" end-col="2" comment="// this method displays the applet.// the Graphics class is how you do all the drawing in Java">
<type name="void" primitive="true"/>
<formal-arguments>
<formal-argument name="g" id="FirstApplet:frm-13">
<type name="Graphics"/>
</formal-argument>
</formal-arguments>
<block line="8" col="32" end-line="10" end-col="2" comment="// do not forget this import statement!// Or this one for the graphics!// this method displays the applet.// the Graphics class is how you do all the drawing in Java">
<send message="drawString">
<target>
<var-ref name="g" idref="FirstApplet:frm-13"/>
</target>
<arguments>
<literal-string value="FirstApplet"/>
<literal-number kind="integer" value="25"/>
<literal-number kind="integer" value="50"/>
</arguments>
</send>
</block>
</method>
</class>
</java-class-file>
</java-source-program>
但是问题来了。我一直在努力让 JavaML and JavaML 2.0 工作。但是存在一些相当明显的兼容性问题。我已经为 JavaML 尝试了 运行ning 新旧 ubuntu 实现的虚拟机(10.04、12.04 和 14.04),试图按照 [=66= 的指示编译源代码]ML 的网站,对于我在配置时不断遇到的所有版本,JavaML 中使用的 Jikes 版本似乎存在问题,这会触发 g++ 编译器的问题。 - 使用较新版本的 Jikes 会使来自 JavaML 的补丁变得毫无价值,因此无法编译 JavaML。
对于 JavaML 2.0,它带有一个 .exe 文件,可以 运行 在 windows 上。您只需要使用 Java 安装的正确路径进行设置(有关说明,请参见下文)。然而,这也给我带来了问题。使用最新的 Java (1.8.0_40) 它会告诉我:'chaos: CODE "15" is an invalid tag !!!' 当我使用 Java 版本设置它时: 1.5.0_14 、 1.5.0_12 、 1.5.0 、 1.4.2_19 和 1.3.1_28 。 exe 文件会崩溃,但首先会生成一个 .tok 文件和一个空的 .xml 文件。
JavaML 2.0
说明- 下载 JavaML 2.0 项目
- 提取到某处
- 启动您的 cmd(命令提示符)
- 导航到您放置 JavaML 2.0 项目的文件夹
- 找到您的 Java 实现(通常存储在:C:\Program Files (x86)\Java)
- 找到您的 rt.jar 文件(通常存储在:C:\Program Files (x86)\Java\jre1.8.0_40\lib\rt.jar)
- 在您的 cmd 中写入以下行
s*
set CLASSPATH=.;C:\Program Files (x86)\Java\jre1.8.0_40\lib\rt.jar
jikes +B +L +c +T=3 +ulx FirstTest.java
如果有人仍在寻找这个问题,我想确保有某种答案。
在我的研究中,我找不到充当 JavaML 的工具,而且我无法让 JavaML 在任何较新的系统上工作。相反,我在 Java 中创建了自己的工具,这让我很头疼,而且它肯定不值得发布。手工创建这样一个工具花了我大约 30 个工时。
如果你真的需要一个类似JavaML的工具,我建议你自定义一个解析器,immibis也建议。
朋友叫我去看看OpenJDK compiler, and customize it. There is a guide to customization of the compiler found here。 - 然而,对于深入了解语言、语法和编译器的人来说,这是一项任务。
祝你好运。
使用 JavaCC 创建自定义解析器。他们已经有分析 Java 代码的示例。