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

📄 jcomplier.java

📁 编译原理
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/**编译原理作业																		//程序注释说明
 *词法分析的带界面程序
 *JComplier.java
 *@author 王利航(20054478)
 *@author 2007.5
 *@version 1.0
 */
 
import javax.swing.*;																//程序所需包
import javax.swing.border.*;

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.regex.*;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.io.*;

class frame extends JFrame implements ActionListener	, ItemListener				//窗体
{
	private JMenuBar menubar;														//声明组件
	private JMenu[] menu=new JMenu[8];
	private JMenuItem[] menuitem=new JMenuItem[16];
	private JCheckBoxMenuItem[] style=new JCheckBoxMenuItem[2];
	private String[] stylenames={"Bold","Italic"};
	
	private JRadioButtonMenuItem[] size=new JRadioButtonMenuItem[3];
	private String[] sizenames={"12","16","20"};
	private ButtonGroup sizebuttongroup=new ButtonGroup();
	private Font area1Font;
	
	private JTextArea area1,area2;
	private JScrollPane s1,s2;
	private JLabel l1,l2;
	private JPanel p1,p2;
	private JFileChooser fileChooser;
	
	String as;
	public frame()																	//窗体构造函数
	{
		super("JComplier");															//初始化窗体
		setSize(1282,999);
		setLocation(0,0);
		setVisible(true);
		
		menubar=new JMenuBar();														//创建菜单相关对象
		menu[0]=new JMenu("文件(F)");
		menu[0].setMnemonic(KeyEvent.VK_F);
		menu[1]=new JMenu("编辑(E)");
		menu[1].setMnemonic(KeyEvent.VK_E);
		menu[2]=new JMenu("格式(O)");
		menu[2].setMnemonic(KeyEvent.VK_O);
		menu[3]=new JMenu("生成(B)");
		menu[3].setMnemonic(KeyEvent.VK_B);
		menu[4]=new JMenu("帮助(H)");
		menu[4].setMnemonic(KeyEvent.VK_H);
		menu[6]=new JMenu("风格");
		menu[6].setMnemonic(KeyEvent.VK_S);
		menu[7]=new JMenu("字号");
		menu[7].setMnemonic(KeyEvent.VK_Z);
		menuitem[0]=new JMenuItem("新建");
		menuitem[0].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
		menuitem[1]=new JMenuItem("打开");
		menuitem[1].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
		menuitem[2]=new JMenuItem("保存");
		menuitem[2].setEnabled(false);
		menuitem[2].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
		menuitem[3]=new JMenuItem("另存");
		menuitem[4]=new JMenuItem("退出");
		
		menuitem[5]=new JMenuItem("剪切");
		menuitem[5].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
		menuitem[6]=new JMenuItem("复制");
		menuitem[6].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
		menuitem[7]=new JMenuItem("粘贴");
		menuitem[7].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
		menuitem[8]=new JMenuItem("删除");
		menuitem[9]=new JMenuItem("全选");
		menuitem[9].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
		
		menuitem[10]=new JMenuItem("自动换行");
		menu[5]=new JMenu("字体");
		
		menuitem[11]=new JMenuItem("词法分析");
		menuitem[12]=new JMenuItem("语法分析");
		menuitem[13]=new JMenuItem("语义分析");
		
		menuitem[14]=new JMenuItem("关于JComplier");
		menuitem[15]=new JMenuItem("作者信息");
		
		for(int i=0;i<style.length;i++)
		{
			style[i]=new JCheckBoxMenuItem(stylenames[i]);
			style[i].addItemListener(this);
			menu[6].add(style[i]);
		}
		for(int i=0;i<size.length;i++)
		{
			size[i]=new JRadioButtonMenuItem(sizenames[i]);
			menu[7].add(size[i]);
			sizebuttongroup.add(size[i]);
			size[i].addActionListener(this);
		}
		
		for(int i=0;i<menuitem.length;i++)											//为菜单项添加监听器
			menuitem[i].addActionListener(this);
		
		fileChooser=new JFileChooser();												//创建文件选择器对象
		area1=new JTextArea(20,20);													//创建文本域对象
		area1Font=area1.getFont();
		area2=new JTextArea(20,20);	
		area2.setEditable(false);
		
		l1=new JLabel("编辑区:");													//创建标签对象
		l2=new JLabel("输出:");
		
		s1=new JScrollPane(area1,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);	
		s1.setBorder(new TitledBorder("EditField:"));
		s2=new JScrollPane(area2,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		s2.setBorder(new TitledBorder("Console:"));
		
		p1=new JPanel();															//创建面板对象
			p1.setLayout(new BorderLayout());
			p1.add(l1,BorderLayout.NORTH);
			p1.add(s1,BorderLayout.CENTER);
		p2=new JPanel();
			p2.setLayout(new BorderLayout());
			p2.add(l2,BorderLayout.NORTH);
			p2.add(s2,BorderLayout.CENTER);
		
		getContentPane().add(p1,BorderLayout.CENTER);								//把s1,s2添加到内容窗格中
		getContentPane().add(p2,BorderLayout.SOUTH);
		
		menu[5].add(menu[6]);
		menu[5].add(menu[7]);
		for(int i=0;i<5;i++)														//把菜单项添加到相应的菜单中
			menu[0].add(menuitem[i]);
		for(int i=5;i<10;i++)
			menu[1].add(menuitem[i]);
		menu[2].add(menuitem[10]);
		menu[2].add(menu[5]);
		menu[3].add(menuitem[11]);
		menu[3].add(menuitem[12]);
		menu[3].add(menuitem[13]);
		menu[4].add(menuitem[14]);
		menu[4].add(menuitem[15]);
		
		for(int i=0;i<5;i++)														//把菜单添加到菜单条中
			menubar.add(menu[i]);
		setJMenuBar(menubar);														//设置菜单条
		
		validate();
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		//for(int i=1;i<=area1.getLineCount();i++)
		//{
		//	area1.setText(String.valueOf(i));
		//	System.out.println();
		//}
	}
	
	public void cifafenxi()														//词法分析					
	{
		as=area1.getText();															//获得文本区字符串
		
		Pattern patk=Pattern.compile("[\n\t\r ]+");											//把,两边替换为"空格,空格"的形式
		Matcher matk=patk.matcher(as);
		as=matk.replaceAll(" ");
		
		//Pattern patz=Pattern.compile(" \\* ");											
		//Matcher matz=patz.matcher(as);
		//as=matz.replaceAll("");
		
		Pattern patd=Pattern.compile(" *, *");											//把,两边替换为"空格,空格"的形式
		Matcher matd=patd.matcher(as);
		as=matd.replaceAll(" , ");
		
		Pattern patf=Pattern.compile(" *; *");											//把;两边替换为"空格;空格"的形式
		Matcher matf=patf.matcher(as);
		as=matf.replaceAll(" ; ");
		
		Pattern patj=Pattern.compile(" *\\. *");										//替换.(句号,只能替换方法调用)
		Matcher matj=patj.matcher(as);
		as=matj.replaceAll(" . ");
		
		Pattern patzx=Pattern.compile(" *\\( *");										//把(两边替换为"空格(空格"的形式
		Matcher matzx=patzx.matcher(as);
		as=matzx.replaceAll(" ( ");
		Pattern patyx=Pattern.compile(" *\\) *");										//替换)
		Matcher matyx=patyx.matcher(as);
		as=matyx.replaceAll(" ) ");			
		
		Pattern patzz=Pattern.compile(" *\\[ *");										//替换[
		Matcher matzz=patzz.matcher(as);
		as=matzz.replaceAll(" [ ");
		Pattern patyz=Pattern.compile(" *\\] *");										//替换]
		Matcher matyz=patyz.matcher(as);
		as=matyz.replaceAll(" ] ");	
		
		Pattern patzd=Pattern.compile(" *\\{ *");										//替换{
		Matcher matzd=patzd.matcher(as);
		as=matzd.replaceAll(" { ");
		Pattern patyd=Pattern.compile(" *\\} *");										//替换}
		Matcher matyd=patyd.matcher(as);
		as=matyd.replaceAll(" } ");
		
		Pattern patdh=Pattern.compile(" *\\= *");										
		Matcher matdh=patdh.matcher(as);
		as=matdh.replaceAll(" = ");
		
		Pattern patja=Pattern.compile(" *\\+ *");											
		Matcher matja=patja.matcher(as);
		as=matja.replaceAll(" + ");
		Pattern patjad=Pattern.compile(" *\\+ *\\= ");											
		Matcher matjad=patjad.matcher(as);
		as=matjad.replaceAll(" += ");
		Pattern patjj=Pattern.compile(" *\\+ *\\+ ");											
		Matcher matjj=patjj.matcher(as);
		as=matjj.replaceAll(" ++ ");
		
		Pattern patji=Pattern.compile(" *\\- *");											
		Matcher matji=patji.matcher(as);
		as=matji.replaceAll(" - ");
		Pattern patjid=Pattern.compile(" *\\- *\\= ");											
		Matcher matjid=patjid.matcher(as);
		as=matjid.replaceAll(" -= ");
		Pattern patjji=Pattern.compile(" *\\- *\\- ");											
		Matcher matjji=patjji.matcher(as);
		as=matjji.replaceAll(" -- ");
		
		Pattern patc=Pattern.compile(" *\\* *");											
		Matcher matc=patc.matcher(as);
		as=matc.replaceAll(" * ");
		Pattern patcd=Pattern.compile(" *\\* *\\= ");											
		Matcher matcd=patcd.matcher(as);
		as=matcd.replaceAll(" *= ");
		
		Pattern patch=Pattern.compile(" *\\/ *");											
		Matcher match=patch.matcher(as);
		as=match.replaceAll(" / ");
		Pattern patchd=Pattern.compile(" *\\/ *\\= ");											
		Matcher matchd=patchd.matcher(as);
		as=matchd.replaceAll(" /= ");
		
		Pattern patx=Pattern.compile(" *< *");											
		Matcher matx=patx.matcher(as);
		as=matx.replaceAll(" < ");
		Pattern patxd=Pattern.compile(" *< *\\= ");											
		Matcher matxd=patxd.matcher(as);
		as=matxd.replaceAll(" <= ");
		
		Pattern patdy=Pattern.compile(" *> *");											
		Matcher matdy=patdy.matcher(as);
		as=matdy.replaceAll(" > ");
		Pattern patdd=Pattern.compile(" *> *\\= ");											
		Matcher matdd=patdd.matcher(as);
		as=matdd.replaceAll(" >= ");
		
		//Pattern patzs=Pattern.compile(" \\/ *\\* *\\* *\\/");											
		//Matcher matzs=patzs.matcher(as);
		//as=matzs.replaceAll(" ");
		
		Pattern pat=Pattern.compile(" ");										//用空格做为分隔
		String dancixulie[]=pat.split(as);										//用dancixulie[]存放单词序列
		
		panduan p=new panduan();
		String[] biaoti={"单词序列","类型"};										//存放表格标题
		String[][] neirong=new String[dancixulie.length][2];					//存放表格内容
		
		for(int j=0;j<dancixulie.length;j++)		
		{
			neirong[j][0]=dancixulie[j];

⌨️ 快捷键说明

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