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

📄 stackvm.java

📁 一个C语言子集的编译器
💻 JAVA
字号:
/*
 * @(#)StackVM.java	1.0.0  05/13/2007
 *
 * Copyright 2007 Xuxt@buaa, No.34060520 All rights reserved.
 */
package com.king4solomon.homework.compiler.pvm;

import java.util.*;

import com.king4solomon.homework.compiler.core.*;
import com.king4solomon.homework.compiler.gui.*;

public class StackVM {

	public StackUnit getUnit(int index) {
		return stack.get(index);
	}

	public int getTypeOf(int index) {
		return stack.get(index).type;
	}

	public String getValueOf(int index) {
		return stack.get(index).value;
	}

	public StackUnit pop() {
		int idx = stack.size() - 1;
		StackUnit tmp = stack.remove(idx);
		StackTable.removeRow();
		return tmp;
	}

	public void push(StackUnit aUnit) {
		stack.add(aUnit);
		StackTable.addRow(new StackTableItem(stack.size() - 1, aUnit.type,
				aUnit.value));
	}

	public void set(int index, StackUnit aUnit) {
		stack.set(index, aUnit);
		String tmp;
		if(aUnit.type == ConstSet.INTEGER)tmp = "int";
		else if(aUnit.type == ConstSet.CHARACTER)tmp = "char";
		else if(aUnit.type == ConstSet.REAL)tmp = "float";
		else if(aUnit.type == ConstSet.VOIDTYPE)tmp = "void";
		else tmp = "unknown";
		SourcePane.table.setValueAt(tmp, index, 1);
		SourcePane.table.setValueAt(aUnit.value, index, 2);
		SourcePane.table.updateUI();
	}

	public int getLength() {
		return stack.size();
	}

	/**
	 * 释放序列号大于index的栈单元
	 * @param index
	 */
	public void free(int index) {
		for (int idx = stack.size() - 1; idx > index; idx--){
			stack.remove(idx);
			StackTable.removeRow();
		}
		SourcePane.table.updateUI();
		
	}
	public static void clear(){
		stack = new LinkedList<StackUnit>();
	}

	static LinkedList<StackUnit> stack = new LinkedList<StackUnit>();
}

⌨️ 快捷键说明

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