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

📄 jcompiler.java

📁 一个用java编写的词法分析器!其主要运用和来源是编译原理词法分析器的课程设计!
💻 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 + -