📄 dataflow.java
字号:
package cn.edu.buaa.scse.liyi.compile.types;
import java.util.LinkedList;
import cn.edu.buaa.scse.liyi.compile.tools.Yacc;
public class DataFlow
{
private Node head=null;
private Node cusor=null;
private LinkedList<Node> nodeList=null;
private int size=0;
/**
* 数据流分析图构造方法
*/
public DataFlow(LinkedList<Quaternion> quaterList)
{
nodeList=new LinkedList<Node>();
for(Quaternion quater:quaterList)
{
nodeList.add(new Node(quater));
}
size=nodeList.size();
}
/**
* 建立数据流图
*/
public void buidDiagram()
{
for(int i=0;i<size-1;i++)
{
if(nodeList.get(i).data.getOperator()==Yacc.CONDITION)
{
nodeList.get(i).branch=nodeList.get(i+1);
nodeList.get(i).trank=nodeList.get(i+2);
}
else if(nodeList.get(i).data.getOperator()==Yacc.J||nodeList.get(i).data.getOperator()==Yacc.JFALSE)
{
String label=nodeList.get(i).data.getOperend1();
for(int j=0;j<size;j++)
{
if(nodeList.get(j).data.getOperator()==Yacc.STAMP&&label.equals(nodeList.get(j).data.getOperend1()))
{
nodeList.get(i).trank=nodeList.get(j);
break;
}
}
}
else
{
nodeList.get(i).trank=nodeList.get(i+1);
}
}
head=nodeList.getFirst();
cusor=head;
}
public boolean hasTrank()
{
if(cusor.trank!=null)
return true;
return false;
}
public boolean hasBranch()
{
if(cusor.branch!=null)
return true;
return false;
}
public Quaternion nextTrank()
{
if(cusor.trank!=null)
{
cusor=cusor.trank;
return cusor.data;
}
else
return null;
}
public Quaternion nextBranch()
{
if(cusor.branch!=null)
{
cusor=cusor.branch;
return cusor.data;
}
else
return null;
}
public int size()
{
return size;
}
}
/**
* 流图的节点
*/
class Node
{
Quaternion data;
Node trank=null;
Node branch=null;
Node(Quaternion quater)
{
this.data=quater;
trank=null;
branch=null;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -