JAVA语言语法树

软件课程设计

题目:Eclipse ast实现语法树

班级:

学号:

姓名:

指导教师:

时间:

一、课程设计要求:

用Eclipse AST分析java程序所形成的抽象语法树,并通过graphviz画出所对应的图。

二、开发环境:

操作系统:windows 7

开发工具:MyEclipse 8.x Graphviz2.28.0

四、具体代码:

1、获取根节点:

public class LxyAst {

private ASTParser astParser = ASTParser.newParser(AST.JLS3);

static String javaFilePath = "D:\\Users\\Administrator\\Workspaces\\MyEclipse

8.x\\LxyAst\\src\\lxy\\ast\\Test.java";

public CompilationUnit getCompilationUnit(String javaFilePath) throws Exception {

BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(javaFilePath));

byte[] input = new byte[bufferedInputStream.available()];

bufferedInputStream.read(input);

bufferedInputStream.close();

this.astParser.setSource(new String(input).toCharArray());

CompilationUnit result = (CompilationUnit) (this.astParser.createAST(null));

return result;

}

2、将节点储存到txt中:

public void writetotext(String str, boolean i) {

try {

FileWriter fw = new FileWriter("E:\\t5.txt", i);

BufferedWriter bw = new BufferedWriter(fw);

bw.write(str);

bw.newLine();

bw.flush();

bw.close();

} catch (IOException e) {

System.out.print(e);

}

}

3、用graphviz画图:

public void Draw() {

Runtime rt = Runtime.getRuntime();

Process p = null;

try {

String s = "D:\\Program Files\\Graphviz 2.28\\bin\\dot E:\\t5.txt -Tpng -o result.png";

p = rt.exec(s);

} catch (Exception e) {

}

}

4、显示结果:

public void open() {

try {

Process p = Runtime.getRuntime().exec("cmd /c cd D:\\Users\\Administrator\\Workspaces\\MyEclipse 8.x\\LxyAst");

Process p2 = Runtime.getRuntime().exec("cmd /c start result.png");

} catch (Exception e) {

}

}

5、遍历语法树:

public void writexly(ASTNode node, String context) {

String wnode, nodename;

Loanode xqnode = new Loanode();

LxyAst xq = new LxyAst();

if (node.getParent() == null) {

xqnode.setMid(id);

xqnode.setPid(-1);

} else {

xqnode.setMid(id);

xqnode.setMnode(node);

for (int i = 0; i

Loanode x = (Loanode) list.get(i);

if (x.getMnode() == node.getParent()) {

xqnode.setPid(x.getMid());

}

}

}

nodename = node.getClass().getName().substring(25);

wnode = "node" + String.valueOf(id) + "[" + "label=\"" + nodename + ":" + context + "\"" + "]" + ";";

xq.writetotext(wnode, true);

list.add(xqnode);

id++;

}

}

读写方法:

public class Loanode {

private int pid;

private int mid;

private ASTNode mnode;

public int getPid() {

return pid;

}

public void setPid(int pid) {

this.pid = pid;

}

public int getMid() {

return mid;

}

public void setMid(int mid) {

this.mid = mid;

}

public ASTNode getMnode() {

return mnode;

}

public void setMnode(ASTNode mnode) { this.mnode = mnode;

}

}

程序运行结果显示:

简单例子:

public class Test {

int a=0;

}

2、带for循环例子:

public class Test {

int a=0;

public static void main(String[] args){ for(int i=0;i

{ int y=0;

y=y+2*(1+1);

}

}

}

六、程序设计中遇到的问题及解决方法:

七、收获和体会:

软件课程设计

题目:Eclipse ast实现语法树

班级:

学号:

姓名:

指导教师:

时间:

一、课程设计要求:

用Eclipse AST分析java程序所形成的抽象语法树,并通过graphviz画出所对应的图。

二、开发环境:

操作系统:windows 7

开发工具:MyEclipse 8.x Graphviz2.28.0

四、具体代码:

1、获取根节点:

public class LxyAst {

private ASTParser astParser = ASTParser.newParser(AST.JLS3);

static String javaFilePath = "D:\\Users\\Administrator\\Workspaces\\MyEclipse

8.x\\LxyAst\\src\\lxy\\ast\\Test.java";

public CompilationUnit getCompilationUnit(String javaFilePath) throws Exception {

BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(javaFilePath));

byte[] input = new byte[bufferedInputStream.available()];

bufferedInputStream.read(input);

bufferedInputStream.close();

this.astParser.setSource(new String(input).toCharArray());

CompilationUnit result = (CompilationUnit) (this.astParser.createAST(null));

return result;

}

2、将节点储存到txt中:

public void writetotext(String str, boolean i) {

try {

FileWriter fw = new FileWriter("E:\\t5.txt", i);

BufferedWriter bw = new BufferedWriter(fw);

bw.write(str);

bw.newLine();

bw.flush();

bw.close();

} catch (IOException e) {

System.out.print(e);

}

}

3、用graphviz画图:

public void Draw() {

Runtime rt = Runtime.getRuntime();

Process p = null;

try {

String s = "D:\\Program Files\\Graphviz 2.28\\bin\\dot E:\\t5.txt -Tpng -o result.png";

p = rt.exec(s);

} catch (Exception e) {

}

}

4、显示结果:

public void open() {

try {

Process p = Runtime.getRuntime().exec("cmd /c cd D:\\Users\\Administrator\\Workspaces\\MyEclipse 8.x\\LxyAst");

Process p2 = Runtime.getRuntime().exec("cmd /c start result.png");

} catch (Exception e) {

}

}

5、遍历语法树:

public void writexly(ASTNode node, String context) {

String wnode, nodename;

Loanode xqnode = new Loanode();

LxyAst xq = new LxyAst();

if (node.getParent() == null) {

xqnode.setMid(id);

xqnode.setPid(-1);

} else {

xqnode.setMid(id);

xqnode.setMnode(node);

for (int i = 0; i

Loanode x = (Loanode) list.get(i);

if (x.getMnode() == node.getParent()) {

xqnode.setPid(x.getMid());

}

}

}

nodename = node.getClass().getName().substring(25);

wnode = "node" + String.valueOf(id) + "[" + "label=\"" + nodename + ":" + context + "\"" + "]" + ";";

xq.writetotext(wnode, true);

list.add(xqnode);

id++;

}

}

读写方法:

public class Loanode {

private int pid;

private int mid;

private ASTNode mnode;

public int getPid() {

return pid;

}

public void setPid(int pid) {

this.pid = pid;

}

public int getMid() {

return mid;

}

public void setMid(int mid) {

this.mid = mid;

}

public ASTNode getMnode() {

return mnode;

}

public void setMnode(ASTNode mnode) { this.mnode = mnode;

}

}

程序运行结果显示:

简单例子:

public class Test {

int a=0;

}

2、带for循环例子:

public class Test {

int a=0;

public static void main(String[] args){ for(int i=0;i

{ int y=0;

y=y+2*(1+1);

}

}

}

六、程序设计中遇到的问题及解决方法:

七、收获和体会:


相关内容

  • Java主要学习哪些内容
  • Java主要学习哪些内容? 最近,总有很多初学Java的朋友询问学Java要学哪些内容.回想8年前我学Java的时候,也是对此一无所知.看着那黑呼呼的命令行窗口,怎么也猜不出它和软件开发有什么关系,也想象不出在控制台输出的乘法口诀1*1=1除了给幼儿园的小朋友做练习之外还有什么用途. 现在,经历了8 ...

  • Java编程入门
  • Java编程入门 理想情况下,在阅读本书前,你应该对Java程序语言已经有了相当程度的掌握.但或许你已 经很久没有用Java,或者你只是想通学习Java知识来进行手机游戏编程.如果你属于上述情况,那么本教程正是为你准备的.本教程不是要教你Java的所有细节,因为已经有大量的优秀书籍在做这些工作.相反 ...

  • 国信蓝点杯课程-参加蓝点必看
  • 课 程 课程内容 Java基础 深入理解计算机系统,了解软件开发行业和软件 开发工作各种常用编程语言的认识.Java语言 的历史.特点.和用途. Java开发环境的搭建,包括操作系统初步培训目标 通过本部分内容的学习,掌握计算机的深入使用和对软件开发的深入认识和理解.掌握Java 编程中的基本语法规 ...

  • 030Java编程如何描述算法
  • Java 编程如何描述算法 算法的描述方法有很多,有自然语言.传统流程图.N-S 结构化流程图和伪代码.自然语言就是4.1.1节中使用的表述方法,使用自然语言描述算法虽然通俗易懂,但容易出现歧义,而且在表示分支和循环时很不方便.因此,下面将对其他三种描述方式进行介绍. 知识点: 1.算法,实际上就是 ...

  • 6种计算机语言的区别
  • Eric Raymond:几种计算机语言的评价 编程新手都有一个同样的问题:我应该学习哪一种语言?. <Unix 编程艺术>(Eric Raymond著)第十四章,对各种语言进行了评价,正好可以用来回答这个问题.下面是知名IT 博客阮一峰的网络日志,整理了六种主要计算机语言的优缺 点.读 ...

  • Java程序员的推荐阅读书籍
  • Java程序员的推荐阅读书籍> JavaEye (http://www.javaeye.com) 作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技 ...

  • 大学生计算机实习报告总结
  • 一 实习目的   理论联系实际,巩固所学知识,提高处理实际问题的能力。为自己能顺利与社会环境接轨做准备。   二 实习任务   计算机基础理论在实践中的应用   三 实习内容   1.mysql数据库的安装。配置和使用 2.java基础,java网络编程 3. linux基础命令,linux bas ...

  • 另类查询Hibernate HQL深度历险_Java开发
  • 传统的SQL语言采用的是结构化的查询方法,而这种方法对于查询以对象形式存在的数据却无能为力.幸运的是,Hibernate为我们提供了一种语法类似于SQL的语言,Hibernate查询语言(HQL),和SQL不同的是,HQL是一种面向对象的查询语言,它可以查询以对象形式存在的数据.因此,本文就HQL如 ...

  • 已分享过jsp常见面试题(4)
  • 已分享过 jsp常见面试题(4) JSP企业面试题整理(1) 图示三层架构,并说明其特点,如何实现,每层实现什么功能?(企业笔试题) 在两层应用中,应用程序直接同数据库进行对话.三层结构在用户接口代码和数据库中间加入了一个附加的逻辑层,通常这个层叫做"商务逻辑层".在" ...