📄 jcompiler.java
字号:
package source;
import java.awt.*;
import java.awt.event.*;
public class JCompiler
{
public static void main(String args[])
{
CompilerFrame MyFrame=new CompilerFrame();
MyFrame.setSize(457,380);
}
}
class CompilerFrame extends Frame implements ActionListener
{
Label prompt;
TextArea input;
TextArea output;
Button m_Button;
CompilerFrame()
{
super("小型词法分析器---作业");
setLayout(new FlowLayout(FlowLayout.LEFT,3,15));
prompt=new Label("请在文本框中输入源代码: ");
add(prompt);
m_Button=new Button("进行词法分析");
add(m_Button);
input=new TextArea("请在这里输入",10,60);
add(input);
output=new TextArea("",6,60,TextArea.SCROLLBARS_VERTICAL_ONLY);
add(output);
m_Button.addActionListener(this);
this.addWindowListener(new WinAdpt());
pack();
show();
}
public String toString(String ss,int i)
{
String s;
s="("+ss+","+i+")"+"\n";
return s;
}
public boolean IsLetter(char ax)
{
if(ax>='a' && ax<='z'||ax>='A' && ax<='Z')
return true;
else
return false;
}
public boolean IsDigit(char ax)
{
if((int)ax>=0 && (int)ax<=9)
return true;
else
return false;
}
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand()=="进行词法分析")
{
int i=0;
char ch=' ';
int dex=0;
String string=input.getText();
ActManage mag=new ActManage();
char[] strToken=new char[12];
while(i<string.length())
{
while(ch==' ' || ch=='\n' || ch=='\t')
{ch=string.charAt(i);i++;}
while(IsDigit(ch))
{strToken[dex++]=ch;ch=string.charAt(i);i++;}
if(strToken[0]!=' ')
{
output.append(toString(new String(strToken),20));
dex=0;
for(i=0;i<12;i++)
{
strToken[i]=' ';
}
continue;
}
while(IsLetter(ch))
{
ch=string.charAt(i);
while(IsLetter(ch)||IsDigit(ch))
{strToken[dex++]=ch;i++;string.charAt(i);}
}
if(strToken[0]!=' ')
{
output.append(toString(new String(strToken),mag.SpeReserve(new String(strToken))));
dex=0;
for(i=0;i<12;i++)
{
strToken[i]=' ';
}
continue;
}
while(ch!=' ') {strToken[dex++]=ch;ch=string.charAt(i);i++;}
if(strToken[0]!=' ')
{
output.append(toString(new String(strToken),mag.SpeReserve(new String(strToken))));
dex=0;
for(i=0;i<12;i++)
{
strToken[i]=' ';
}
continue;
}
output.setText("ERROR!");
}
}
}
}
class WinAdpt extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
Frame frm=(Frame)(e.getWindow());
frm.dispose();
System.exit(0);
}
}
class ActManage
{
static int syn[]={1,2,3,4,5,6,7,-1,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40};
static String[] SpeSymbols={"=","+","-","*","/","(",")","[","]","{","}",",",":",";",">","<",">=","<=","==","!="};
static String[] KeyWords={"main","int","char","if","else","for","while","ERROR"};
public int KeyReserve(String a)
{
for(int i=0;i<=7;i++)
{
if(KeyWords[i].equals(a))
return syn[i];
else
return 10;
}
return 0;
}
public int SpeReserve(String a)
{
for(int i=0;i<=19;i++)
{
if(SpeSymbols[i].equals(a))
return syn[8+i];
else
return 0;
}
return 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -