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

📄 dialog.java

📁 简单的实现了要求的功能
💻 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)//是否为定义的关键字
	outputArea.append("(1,'"+a.toString()+"')\n");
	else//是否为标识符
	outputArea.append("(2,'"+a.toString()+"')\n");
	}
	else
	if(ch>='0'&&ch<='9')//如果字符串以数字开头
   {     
		    // 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());
}
}
}
);
}
}
}

⌨️ 快捷键说明

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