?? dialog.java
字號:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.util.ArrayList;
public class Dialog {
public static void main(String[] args)
{
DialogFrame dialogFrame=new DialogFrame();
dialogFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
dialogFrame.show();
}
}
class DialogFrame extends JFrame
{
public static String[] Key={"begin","call", "const", "do","end", "if", "odd","procedure","read", "then", "var","while","write"};
public static int Max_Number=50;
public static int Key_Sum=13;
public DialogFrame()
{
setTitle("詞法分析程序");
setSize(300,200);
Container contentPane=getContentPane();
DialogPanel panel=new DialogPanel();
contentPane.add(panel);
setSize(400,350);
}
class DialogPanel extends JPanel
{
ArrayList Blank(String getString)//處理空格,把輸入的語言按照空格分置成字符串
{
ArrayList returnString=new ArrayList();
int i=1;
//System.out.println(getString);
StringTokenizer getStringTokenizer=new StringTokenizer(getString," ");
while(getStringTokenizer.hasMoreTokens())
{
returnString.add(getStringTokenizer.nextToken());
// System.out.println(i);
i++;
}
return returnString;
}
void Analysis(String getString)//分析單個字符串
{
StringBuffer a=new StringBuffer();
char ch=getString.charAt(0);
int i=0;
int j=0;
if((ch>='a'&&ch<='z')||ch=='_')//如果字符串以此開頭
{
do
{
a.append(ch);
i++;
if(i<getString.length())
ch=getString.charAt(i);
}while(((ch>='a'&&ch<='z')||(ch>='0'&&ch<='9'))&&i<getString.length());
for(j=0;j<Key_Sum;j++)
if((a.toString()).equals(Key[j]))
break;
if(j<Key_Sum)//是否為定義的關(guān)鍵字
outputArea.append("(1,'"+a.toString()+"')\n");
else//是否為標(biāo)識符
outputArea.append("(2,'"+a.toString()+"')\n");
}
else
if(ch>='0'&&ch<='9')//如果字符串以數(shù)字開頭
{
// System.out.println("number");
do
{
a.append(ch);
i++;
if(i<getString.length())
ch=getString.charAt(i);
}while(ch>='0'&&ch<='9'&&i<getString.length());
outputArea.append("(3,'"+a.toString()+"')\n");
}
else
if(ch==':')//如果以:開頭,判斷是否為:=賦值號
{ a.append(ch);
char next=getString.charAt(i+1);
if(next=='=')
{
i=2;
a.append(next);
outputArea.append("(4,'"+a.toString()+"')\n");
}
}
else//是否以>或<開頭
if(ch=='<'||ch=='>')
{ a.append(ch);
char next=getString.charAt(i+1);
if(next=='=')
{
i=2;
a.append(next);
outputArea.append("(4,'"+a.toString()+"')\n");
}
}
else//其他情況處理
{
i++;
switch(ch)
{
case '+':outputArea.append("(4,'"+ch+"')\n");break;
case '-':outputArea.append("(4,'"+ch+"')\n");break;
case '*':outputArea.append("(4,'"+ch+"')\n");break;
case '/':outputArea.append("(4,'"+ch+"')\n");break;
case '(':outputArea.append("(5,'"+ch+"')\n");break;
case ')':outputArea.append("(5,'"+ch+"')\n");break;
case ',':outputArea.append("(5,'"+ch+"')\n");break;
case '.':outputArea.append("(5,'"+ch+"')\n");break;
case ';':outputArea.append("(5,'"+ch+"')\n");break;
}
}
//System.out.println("i="+i);
//如果字符串還有剩余部分沒有處理
String surplusString=getString.substring(i,getString.length());
if(i<getString.length())
Analysis(surplusString);
}
TextArea inputArea=new TextArea(20,20);
TextArea outputArea=new TextArea(20,20);
Label input=new Label("輸入文法");
Label output=new Label("輸出2元式");
Button button=new Button("分析");
public DialogPanel()
{
add(input);
add(inputArea);
add(button);
add(output);
add(outputArea);
button.addActionListener(
new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
String str=inputArea.getText();
ArrayList s=Blank(str);
for(int i=0;i<s.size();i++)
{
Analysis((s.get(i)).toString());
}
}
}
);
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -