codetable.java

来自「非常好的编译源代码 将一个l语言转换为中间代码 java版本」· Java 代码 · 共 87 行

JAVA
87
字号
/*
 *@author yiminghe,创建日期 : 2006-5-28
 *
 * Email:yiming_water@hotmail.com
 */
package parser;

import java.util.ArrayList;

public class CodeTable {
	//全局,下一条生成代码的条数
	public static int nextquad = 1;
	
	//所有生成的四元式
	private ArrayList codes = new ArrayList();

	// 生成代码四元式
	public void gen(String op, String arg1, String arg2, String dest) {

		
		MiddleCode t = new MiddleCode(op, arg1, arg2, dest);
		codes.add(t);

		System.out.println(nextquad + " : " + t.toString());
		nextquad++;
	}

	
	/**
	 * @docRoot 数组链表
	 * @param list1 ,list2 所合并的两个链表
	 * @return 合并后链表的表头
	 */
	public int merge(int list1, int list2) {

		//无需链接
		if(list1 == 0 && list2 == 0 ) 
			return 0;
		
		//保证从非空的链开始
		if(list1==0) {
			list1=list2;
			list2=0;
		}
		
		//list1 链接 list2
		int pre = 0;
		int cur = list1;
		while (cur != 0) {
			pre = cur;
			cur = Integer.parseInt(((MiddleCode) codes.get(cur - 1)).dest);
		}
		((MiddleCode) codes.get(pre - 1)).dest = list2 + "";

		return list1;
	}

	
	/**
	 * @docRoot 四元式 目的地回填
	 * @param list 回填链表的表头
	 * @param quad 回填的值
	 */
	public void backpath(int list, int quad) {
		int cur = list;
		String strquad=quad+"";
		int next=cur;
		while (next != 0) {
			 next = Integer.parseInt(((MiddleCode) codes.get(cur - 1)).dest);
			((MiddleCode) codes.get(cur - 1)).dest=strquad+"";
			cur=next;
		}
	}
	
	
	//输出
	public void print() {
		System.out.println();
		System.out.println("**********经过回填后 :**************");
		System.out.println();
		for(int i=0;i<codes.size();i++) 
			System.out.println((i+1)+" : "+codes.get(i));
		
	}

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?