CS计算机代考程序代写 Java 获取ETL文件执行后所运行的代码行

获取ETL文件执行后所运行的代码行

基础知识:
语言相关:Java
工具使用:Eclipse
Epsilon:是一个用于建模工程的建模语言和工具的集合

这次的课题,主要与ETL(Epsilon Transformation)和EOL(Epsilon Object)语言相关,ETL继承了EOL,主要用于模型间的转换.
这个是ETL文件中语言的一个例子,该课题不需要掌握EOL和ETL的具体语法

具体做法:
1.
先根据这个引导
https://www.eclipse.org/epsilon/doc/articles/running-from-source/
克隆Epsilon的源代码库并将plugins, features和tests三个文件夹的所有package右键完成import project.

2.
主要涉及的文件在源代码中的位置:
包名org.eclipse.epsilon.common.parse
AST.java
包名org.eclipse.epsilon.eol.execute.control
IExecutionListener.java
包名org.eclipse.epsilon.common.module
ModuleElement.java

3.
具体思路

代码的实现流程图(最终目标是获取ETL文件执行后所运行的代码行)

为了获得Executed lines(执行的代码)需要对ETL文件的运行进行记录,ETL 运行之前会被编译为一个AST ( abstract syntax tree), 这个AST的每个节点就是ETL的module elements, 这样就可以通过查看AST的激活状态来判断运行的代码行,对于如何建立ETL和AST节点(module elements)之间的关系方法如下图所示

ETL(IEtlModule) 和 AST (Module Element)之间的关系图

ETL继承了EOL所以也继承了EolModule模块中的ExecutionListener interface接口,可以根据需要实例化这个接口的功能,在这个接口中有三个方法,
该课题主要用到的方法是
finishedExecuting(ModuleElment ast, Objct result, IEolContext context)
这个方法在每一次AST节点被调用的时候都会运行,该方法的第一个属性是ModuleElement ast,它代表着执行的last节点,所以通过标记这个节点我们就可以知道哪些ETL语句得到了运行。

而在ModuleElement中还存在一个方法叫做:
getRegine()
这个方法的返回值是行列数据
如”1:1- 20:30”代表这个ModuleElement是从代码的第一行第一列运行到第20行第30列.

所以,通过使用上面两个方法就可以通过实例化在ExecutionListener interface接口的finishedExecuting() 方法,在实例化的方法中记录每一个AST节点运行后所返回的行列数据.

4. 用于测试的ETL代码
在Epsilon的源代码中有example文件夹,里面的org.eclipse.epsilon.eunit.examples.etl包中有一个小的etl文件案例, 目标是获取到该etl文件运行后所执行的代码行数据(哪些代码运行了,哪些代码没有运行).

5. 其他
这个代码需求的期限是一星期,这个课题是我全课的一个小部分,希望程序员愿意和我多交流问题,如果这个代码完成的效果好,那么后续还会再下单与该课题相关的代码需求。