📄 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)//是否为定义的关键字
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 + -