⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dataflow.java

📁 北航编译原理课程设计成果——一个扩充的C0文法编译器
💻 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 + -