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

📄 applet1.java

📁 学习数据结构的最好辅助工具,快速帮助你熟悉数据结构的相关技术
💻 JAVA
字号:
import java.awt.*;
import java.applet.*;
import Demo;
import GoThread;

public class Applet1 extends Applet
{
	private String sourceCode[] = {
		"void transform(char suffix[], char exp[] )",				// 0
		"{",														// 1
		"  InitStack(S); Push(S,'#');",								// 2
		"  p = exp; ch = *p;",										// 3
		"  while (!StackEmpty(S))",									// 4
		"  {",														// 5
        "    if (!IN(ch, OP)) Pass( Suffix, ch);",					// 6
        "    else {",												// 7
		"      switch (ch) {",										// 8
		"      case '(': Push(S, ch); break;",						// 9
		"      case ')': Pop(S, c);",								// 10
		"        while (c!= '(')",									// 11
		"          { Pass( Suffix, c); Pop(S, c) }",				// 12
		"        break;",											// 13
		"      defult :",											// 14
		"        while(!Gettop(S, c) && ( precede(c,ch)))",			// 15
		"          { Pass( Suffix, c); Pop(S, c); }",				// 16
		"        if ( ch!='#') Push( S, ch);",						// 17
		"        break;",											// 18
		"      }",													// 19
		"    }",													// 20
		"    if ( ch!='#') { p++; ch = *p; }",						// 21
        "  }",														// 22
		"}" };														// 23
	private String m_data = "a+b*c-d/e*f#", m_suffix = "";
	public int m_step = 0;
	private int m_numLines = 23;
	private GoThread go;
	public boolean m_paused = true;

	// Virtual Machine and its process
	class CVirtualMachine
	{
		int p;
		char ch, c;
	};
	private CVirtualMachine m_VM;
	
	public int proceed()
	{
		switch(m_step)
		{
		case 0:
			m_data = tData.getText();
			m_suffix = "";
			tSuffix.setText(m_suffix);
			tCh.setText("");
			tC.setText("");
			m_SDemo.reset();
			return 2;
		case 2:
			m_SDemo.init();
			m_SDemo.push('#');
			return 3;
		case 3:
			m_VM.p = 0;
			m_VM.ch = m_data.charAt(m_VM.p);
			tCh.setText(new Character(m_VM.ch).toString());
			return 4;
		case 4:
			if(m_SDemo.isEmpty()) return 22;
			return 6;
		case 6:
			if(INOP(m_VM.ch)!=0) return 8;
			m_suffix = m_suffix + m_VM.ch;
			tSuffix.setText(m_suffix);
			return 21;
		case 8:
			switch(m_VM.ch)
			{
			case '(':
				return 9;
			case ')':
				return 10;
			default:
				return 14;
			}
		case 9:
			if(!m_SDemo.push(m_VM.ch)) return 0;
			return 21;
		case 10:
			m_VM.c = m_SDemo.pop();
			if(m_VM.c == ' ') return 0;
			tC.setText(new Character(m_VM.c).toString());
			return 11;
		case 11:
			if(m_VM.c != '(') return 12;
			return 13;
		case 12:
			m_suffix = m_suffix + m_VM.c;
			tSuffix.setText(m_suffix);			
			m_VM.c = m_SDemo.pop();
			if(m_VM.c == ' ') return 0;
			tC.setText(new Character(m_VM.c).toString());
			return 11;
		case 13:
			return 21;
		case 14:
			return 15;
		case 15:
			m_VM.c = m_SDemo.getTop();
			tC.setText(new Character(m_VM.c).toString());
			if(m_VM.c != ' ' && precede(m_VM.c, m_VM.ch)) return 16;
			return 17;
		case 16:
			m_suffix = m_suffix + m_VM.c;
			tSuffix.setText(m_suffix);			
			m_VM.c = m_SDemo.pop();
			tC.setText(new Character(m_VM.c).toString());
			return 15;
		case 17:
			if(m_VM.ch!='#') if(!m_SDemo.push(m_VM.ch)) return 0;
			return 18;
		case 18:
			return 21;
		case 21:
			if(m_VM.ch != '#')
			{
				m_VM.p ++;
				if(m_VM.p>=m_data.length())
				{
					m_SDemo.error("输入表达式有误");
					return 0;
				}
				m_VM.ch = m_data.charAt(m_VM.p);
				tCh.setText(new Character(m_VM.ch).toString());
			}
			return 4;
		default:
			return 0;
		}
	}
	
	private int INOP(char c)
	{
		switch(c)
		{
		case '#':
			return 1;
		case '(':
		case ')':
			return 2;
		case '+':
		case '-':
			return 3;
		case '*':
		case '/':
			return 4;
		default:
			return 0;
		}
	}
	
	private boolean precede(char c1, char c2)
	{
		return INOP(c1)>=INOP(c2);
	}

	private GridBagLayout gbLayout;
	private GridBagConstraints gbConstraints;
	
	private TextArea Source;
	public Button bNext, bReset, bGo;
	private Demo m_SDemo;
	private TextField tData, tSuffix, tCh, tC;
	private Label l1, l2, l3, l4;
	
	private void addComponent(Component c, int column, int row, int width, int height)
	{
		gbConstraints.gridx = column;
		gbConstraints.gridy = row;
		gbConstraints.gridwidth = width;
		gbConstraints.gridheight = height;
		gbLayout.setConstraints(c, gbConstraints);
		add(c);
	}

	/**
	 * The entry point for the applet. 
	 */
	public void init()
	{
		gbLayout = new GridBagLayout();
		setLayout( gbLayout );
		gbConstraints = new GridBagConstraints();
		
		Source = new TextArea( 20, 50);
		Source.setEditable(false);
		Source.setBackground(Color.white);
		for(int i=0;i<m_numLines;i++) Source.append(sourceCode[i] + "\r\n");
		bNext = new Button("执行下一句");
		bReset = new Button("重置环境");
		bGo = new Button("连续执行");
				
		m_SDemo = new Demo();
		m_SDemo.setSize(350,200);
		tData = new TextField(m_data);
		tSuffix = new TextField("             ");
		tSuffix.setEditable(false);
		tCh = new TextField(3);
		tCh.setEditable(false);
		tC = new TextField(3);
		tC.setEditable(false);
		l1 = new Label("输入表达式exp", Label.RIGHT);
		l2 = new Label("后缀式suffix", Label.RIGHT);
		l3 = new Label("正在分析的字符ch", Label.RIGHT);
		l4 = new Label("字符c", Label.RIGHT);
		l1.setSize(30, 20);
		l2.setSize(30, 20);

		addComponent(Source, 0, 0, 3, 3);
		addComponent(m_SDemo, 3, 0, 4, 1);
		addComponent(l1, 4, 1, 1, 1);
		addComponent(tData, 5, 1, 1, 1);
		addComponent(l2, 4, 2, 1, 1);
		addComponent(tSuffix, 5, 2, 1, 1);
		addComponent(bNext, 0, 3, 1, 1);
		addComponent(bReset, 1, 3, 1, 1);
		addComponent(bGo, 2, 3, 1, 1);
		addComponent(l3, 3, 3, 1, 1);
		addComponent(tCh, 4, 3, 1, 1);
		addComponent(l4, 5, 3, 1, 1);
		addComponent(tC, 6, 3, 1, 1);
		
		m_VM = new CVirtualMachine();
		go = new GoThread(this);
		go.start();
	}

	public boolean action(Event p1, Object p2)
	{
		if( p1.target == bNext )
		{
			m_step = proceed();
			showSource();
		}
		else if( p1.target == bReset )
		{
			m_step = 0;
			showSource();
			m_SDemo.reset();
		}
		else if( p1.target == bGo )
		{
			if(m_paused)
			{
				bNext.setEnabled(false);
				bReset.setEnabled(false);
				go.resume();
				bGo.setLabel("暂停执行");
				m_paused = false;
			}
			else
			{
				go.suspend();
				bGo.setLabel("连续执行");
				m_paused = true;
				bNext.setEnabled(true);
				bReset.setEnabled(true);
			}
		}
		return true;
	}
	
	public void showSource()
	{
		int start = 0;
		for(int i=0; i<m_step; i++) start += sourceCode[i].length() + 1;
		Source.select( start, start + sourceCode[m_step].length() );
	}
	
}

⌨️ 快捷键说明

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