📄 applet1.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 + -