加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

JAVA实现编译原理大作业1:词法分析

(2011-04-15 21:43:28)
标签:

it

分类: JAVA

http://s9/middle/4e1e357d4a0f53fd4ae08&690

package main;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.Array;
import java.util.ArrayList;

import javax.swing.JButton;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

 


public class Load extends JFrame{
 private JPanel input_panel;
 private JPanel button_panel;
 private JPanel show_panel;
 private JButton clearbutton;
 private JButton N_KEY;
 private JButton N_operators;
 private JButton N_word;
 private JButton N_number;
 private JTextArea show_area;
 private JTextArea input_area;
 private JButton 语法分析;
 private JButton word_ana;
 private int letters=0;
 private int numbers=0;
 private int operators=0;
 private ArrayList<Myobj> arrletter;
 private ArrayList<Myobj> arrnumber;
 private ArrayList<Myobj> arroperator;
 private Myobj ol;
 private Myobj on;
 private Myobj oo;
 
 public Load() {
  // TODO Auto-generated constructor stub
  super("老穆的词法分析器");
  arrletter = new ArrayList<Myobj>();
  arrnumber = new ArrayList<Myobj>();
  arroperator = new ArrayList<Myobj>();
  arrlistInit();
  initGUI();
 }

 private void arrlistInit() {
  arrletterInit();
  arrnumberInit();
  arroperatorInit();
  
 }

 private void arrnumberInit() {
  // TODO Auto-generated method stub
  for(int i=0;i<=9;i++){
   Myobj mo = new Myobj();
   mo.setCounts(0);
   mo.setKind(i+1);
   mo.setStr(i+"");
   arrnumber.add(mo);
  }
 }

 private void arrletterInit() {
  // TODO Auto-generated method stub
  for(int i=0;i<26;i++){
   Myobj mo = new Myobj();
   mo.setCounts(0);
   mo.setKind(i+1);
   int in =i+'a';
   char ch = (char)in;
   mo.setStr(ch+"");
   System.out.println(ch+"");
   arrletter.add(mo);
  }
  for(int i=0;i<26;i++){
   Myobj mo = new Myobj();
   mo.setCounts(0);
   mo.setKind(i+1);
   int in =i+'A';
   char ch = (char)in;
   mo.setStr(ch+"");
   System.out.println(ch+"");
   arrletter.add(mo);
  }
 }

 private void arroperatorInit() {
  // TODO Auto-generated method stub
  
 }

 private void initGUI() {
  // TODO Auto-generated method stub
  this.setBounds(400, 30, 600, 600);
  this.setLayout(null);
  this.setVisible(true);
  {
   input_panel = new JPanel();
   getContentPane().add(input_panel);
   input_panel.setBounds(7, 7, 428, 256);
   input_panel.setBackground(new java.awt.Color(128,128,255));
   {
    input_area = new JTextArea();
    input_panel.add(getInput_area());
    input_area.setPreferredSize(new java.awt.Dimension(415, 243));
   }
  }
  {
   button_panel = new JPanel();
   getContentPane().add(button_panel);
   button_panel.setBounds(441, 7, 131, 256);
   button_panel.setBackground(new java.awt.Color(118,143,211));
   {
    word_ana = new JButton();
    button_panel.add(word_ana);
    word_ana.setText("\u8bcd\u6cd5\u5206\u6790");
    word_ana.setPreferredSize(new java.awt.Dimension(87, 29));
    word_ana.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent evt) {
      show_area.setText("分析结果:\n");
      analyse();
      show_area.append("数字:"+numbers+" 字母:"+letters+" 运算符:"+operators+"\n\n");
      numbers=0;
      letters=0;
      operators=0;
     }
    });
   }
   {
    N_number = new JButton();
    button_panel.add(N_number);
    N_number.setText("\u6570\u5b57\u5206\u6790");
    N_number.setPreferredSize(new java.awt.Dimension(87, 30));
    N_number.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent evt) {
      
     }
    });
   }
   {
    N_operators = new JButton();
    button_panel.add(N_operators);
    N_operators.setText("\u8fd0\u7b97\u7b26\u5206\u6790");
    N_operators.setPreferredSize(new java.awt.Dimension(86, 29));
   }
   {
    N_word = new JButton();
    button_panel.add(N_word);
    N_word.setText("\u5b57\u6bcd\u5206\u6790");
    N_word.setPreferredSize(new java.awt.Dimension(86, 29));
   }
   {
    N_KEY = new JButton();
    button_panel.add(N_KEY);
    N_KEY.setText("\u5173\u952e\u5b57\u5206\u6790");
    N_KEY.setPreferredSize(new java.awt.Dimension(87, 27));
   }
   {
    语法分析 = new JButton();
    button_panel.add(语法分析);
    语法分析.setText("\u8bed\u6cd5\u5206\u6790");
    语法分析.setPreferredSize(new java.awt.Dimension(87, 27));
   }
   {
    clearbutton = new JButton();
    button_panel.add(clearbutton);
    clearbutton.setText("\u6e05\u7a7a\u6570\u636e");
    clearbutton.setPreferredSize(new java.awt.Dimension(88, 30));
   }
  }
  {
   show_panel = new JPanel();
   getContentPane().add(show_panel);
   show_panel.setBounds(7, 269, 565, 288);
   show_panel.setBackground(new java.awt.Color(198,194,241));
   {
    show_area = new JTextArea();
    show_panel.add(getShow_area());
    show_area.setPreferredSize(new java.awt.Dimension(553, 279));
   }
  }

 }

 protected void analyse() {
  // TODO Auto-generated method stub
  String orText = input_area.getText().trim();
  for(int i=0;i<orText.length();i++){
   char str = orText.charAt(i);
   if(str<='9'&&str>='0'){
    //代表数字
    numbers++;
   }
   else if((str<='Z'&&str>='A')||(str<='z'&&str>='a')){
    //代表字母
    letters++;
   }
   else if((str=='+')||(str=='-')||str=='*'||str=='/'||str=='='||str=='['||str==']'||str=='('||str==')'||str=='.'||str=='!'||str=='&'||str=='~'||str=='%'){
    //代表运算符
    operators++;
   }
   int kind = showkind(str);
  }
 }

 private int showkind(char str) {
  // TODO Auto-generated method stub
  switch(str){
   case '[': return 1;
   case ']': return 2;
   case '.': return 3;
//   case '->': return 4;  指向
//   case '-': return 5;  负号
   case '(': return 6;
   case ')': return 7;
//   case '++': return 8;
//   case '--': return 9;
//   case '*': return 10; 对象
   case '&': return 11;
   case '!': return 12;
   case '~': return 13;
   
   case '/': return 14;
   case '*': return 15; 
   case '+': return 16;
   case '-': return 17;
   
   case '<': return 18;
   case '>': return 19;
   case '|': return 20;
   case '=': return 21;
   case ',': return 22;
   
  }
   
  return 0;
 }

 
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Load a = new Load();
 }
 
 public JTextArea getInput_area() {
  return input_area;
 }
 
 public JTextArea getShow_area() {
  return show_area;
 }

}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有