简单的词法分析程序

//入口类

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;

import org.omg.CORBA.portable.InputStream;


public class TestTokenAnanlize {

 public static void main(String[] args) throws IOException
 {
   MyCompiler cp = new MyCompiler();
   //接受读取的字符串
   String bufferOne = null;
   String bufferTwo = null;
   String scannerResult = null;
   StringBuffer fileString = new StringBuffer(50000);
   int Index = 0;
   int vitalIndex = 0;
   int helpVitalIndex = 0;
  
  
  
  //ArrayList的读 快改慢的特点适合作为关键字的比较
  ArrayList<String> str = new ArrayList<String>();
  
  File getFile = new File("abc.txt");
  File vitaleFile = new File("vital.txt");
  File targetFile = new File("targetfile.txt");
  
  //建立一个预定缓冲区的输入流,读取文件
  BufferedReader inOne = null;
  BufferedReader inTwo = null;
  BufferedWriter bf = null;
  
  //创建输入输出流,关联文件
  
 try{
   inTwo = new BufferedReader(new FileReader(vitaleFile));
   bf = new BufferedWriter(new FileWriter("targetfile.txt"),3000);
   inOne = new BufferedReader(new FileReader(getFile));
  
  
  //经测试,关键字被成功加入到str中
  while((bufferTwo = inTwo.readLine()) != null)
  {
   bufferTwo = bufferTwo.trim();
   
   while(vitalIndex < (bufferTwo.length()- 1))
   {
    if(bufferTwo.length() <= 0)
     break;
    while(bufferTwo.charAt(vitalIndex) != ',' && (vitalIndex < (bufferTwo.length()- 1)))
    {
     vitalIndex++;
    }
   
    str.add(bufferTwo.substring(helpVitalIndex, vitalIndex));
    System.out.println(str.get(str.size() - 1));
    
    helpVitalIndex = vitalIndex;
    vitalIndex++;
    helpVitalIndex++;
   }
   
   vitalIndex = 0;
   helpVitalIndex = 0;
  }
  
  
  //解析程序
  while((bufferOne = inOne.readLine()) != null)
  {
   
   //除去开头和结尾的空白
   bufferOne = bufferOne.trim();
   
   //不断调用Scanner()函数扫描每一行代码
   while(Index <= bufferOne.length() - 1 && bufferOne.length() != 0)
   {
    //出现异常
    scannerResult = cp.Scanner(bufferOne,Index,str);
    //如果是注释行,则推出循环
    if(scannerResult == "annotation")
    {
     break;
    }
    
    //将解析出来的单词存放在StringBuffer字符串缓冲区当中,留待以后写入文件
    fileString = fileString.append(new Character(scannerResult.charAt(0)).toString()
      + "  " + scannerResult.substring(1, scannerResult.length()) + "\n");
    
    //打印解析出来的单词
    System.out.println("(" + scannerResult.charAt(0) + "  " + 
      scannerResult.substring(1, scannerResult.length()) + ")");
    Index = cp.GetsecIndex();
    
    //观察100毫秒
    Thread.sleep(100);
   }
   
   //观察500毫秒
   Thread.sleep(500);
   
   //索引归位
   Index = 0;
  }
 
  
 }catch(IOException e){
  
  e.printStackTrace();
  
 } catch (InterruptedException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }finally{
  
  inTwo.close();
  inOne.close();
  bf.close();
 }
 
  
 } 
}

 

//实现类

import java.util.ArrayList;

class MyCompiler {

 StringBuffer scannerResult = new StringBuffer(100);
 char ch;
 int signal = 0;
 int Index = 0;
 int secIndex = 0;
 boolean isKeyword = false;

 public MyCompiler() {
 }

 // 驱动表,抽象为一个字符数组,索引0~25为小写英文字母,26~51为大写英文字母,52~61为数字,
 // 62~74为界符,75~86为算符,87~93为特殊字符

 char[] c = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'f', 'k', 'l',
   'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
   'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
   'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
   'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '*', '%',
   '&', '|', '<', '=', '>', '/', '+', '?', '!', '-', '[', ']', '{',
   '}', ',', ';', ':', '.', '"', '(', ')', '\\', '#',
'@', '^', '~',
   '`', '$' };

 // 70 + 13 + 9 = 92
 // 62~73为算符
 // 86~91为特殊字符
 // secIndex变化,Index必须同步变化

 public String Scanner(String bufferOne, int Index, ArrayList<String> str) {
  // 主程序和被调程序的索引一致性检查
  if (secIndex == Index) {
   this.secIndex = Index;
   this.Index = Index;
  } else {
   this.secIndex = Index;
   this.Index = Index;
  }
  // 如果到达了一行的末尾,则说明已经开始解析下一行代码
  if (secIndex == bufferOne.length()) {
   // 索引归位
   secIndex = 0;
   this.Index = 0;
  }

  // 开始解析单词
  while ((bufferOne != null) && (secIndex <= bufferOne.length() - 1)) {
   // 进入扫描阶段,获取第一个字符,或者当前指针指向的字符
   ch = bufferOne.charAt(secIndex);

   // 如果是注释行,直接打印出来
   if (String.valueOf(ch).equals("/")
     && String.valueOf(bufferOne.charAt(secIndex + 1)).equals(
       "/")) {
    System.out.println(bufferOne);
    // if(secIndex <= bufferOne.length() - 1)
    // {
    secIndex = bufferOne.length();
    return "annotation";
    // }
    // else
    // {
    // secIndex = bufferOne.length();
    // return "//";
    // }
   }

   // 如果是数字常数
   if ((secIndex + 1) <= bufferOne.length() - 2
     && (Character.isDigit(ch) || (ch == '.' && Character
       .isDigit(bufferOne.charAt(secIndex + 1))))) {
    signal = 0;
   }
   // 如果是小写字母或者大写字母或者是下划线
   else if (Character.isLowerCase(ch) || Character.isUpperCase(ch)
     || ch == '_') {
    signal = 1;
   }

   // 如果是空白字符
   else if (Character.isSpaceChar(ch)) {
    signal = 3;
    secIndex = secIndex + 1;
    this.Index = secIndex;
   }
   // 其他情况为界符或者算符或者特殊字符
   else {
    for (int i = 62; i <= 73; i++) {
     if (ch == c[i]) {
      // 如果是算符
      signal = 4;
      break;
     }
    }
    // 如果不是算符,则判断是界符还是特殊字符
    if (signal != 4) {
     for (int i = 86; i <= 91; i++) {
      // 特殊字符
      if (ch == c[i]) {
       signal = 6;
       break;
      }
     }
     // 界符
     if (signal != 6) {
      signal = 5;
     }
    }
   }

   // 根据字符继续向后扫描,判断并返回指定字符串
   switch (signal) {
   case 0:

    // 循环的过程当中判断是否到达了一行的末尾
    while (Character.isDigit((bufferOne.charAt(secIndex)))) {
     if (secIndex < bufferOne.length() - 1) {
      secIndex++;
     } else {
      // 如果到达一行的末尾,将secIndex自增1,便于主程序操控,进入下一行的扫描
      secIndex = secIndex + 1;
      break;
     }
    }

    // 如果上面的while循环判断除了已经到达一行末尾,对出最外层while循环
    if (secIndex == bufferOne.length()) {
     scannerResult = new StringBuffer(bufferOne.substring(Index,
       secIndex));
     // 到达末尾,归零处理
     secIndex = 0;
     this.Index = 0;

     break;
    }

    // 若未到达末尾,判断当前字符是否为空格,如果为空格,则此锁定的字符串只可能是数字
    if (bufferOne.charAt(secIndex) == ' ') {
     // 将空格一起返回到main()方法,空间开销可能会比较大
     scannerResult = new StringBuffer(bufferOne.substring(Index,
       secIndex));
     this.Index = secIndex;

     // 追加常数标志位
     scannerResult = scannerResult.insert(0, '0');
    }

    // 2013年4月24日
    // 5.4e223,5.24E9,.78,3E535,543e4
    // 暂时不考虑正数中含有E字符的数字
    // 根据不同情况讨论

    else if ((bufferOne.charAt(secIndex) == '.')) {
     int figure = 0;
     while (Character.isDigit((bufferOne.charAt(secIndex
       + figure + 1)))) {
      if ((secIndex + figure + 1) == bufferOne.length() - 1) {
       secIndex = bufferOne.length();
       this.Index = bufferOne.length();
       return new StringBuffer(bufferOne.substring(Index,
         secIndex + figure + 1)).insert(0, '0')
         .toString();
      }
      figure++;
     }

     secIndex = secIndex + figure + 1;
     this.Index = secIndex + figure + 1;
     scannerResult = new StringBuffer(bufferOne.substring(Index,
       secIndex));

     scannerResult.insert(0, '0');

     /****
      * if(figure != 0 && (bufferOne.charAt(secIndex + figure) ==
      * 'E')) {
      * while(Character.isDigit((bufferOne.charAt(secIndex +
      * figure + 1)))) { figure++; } //此时secIndex +
      * figure处的字符已经非数字 //687678jio; scannerResult = new
      * StringBuffer(bufferOne.substring(Index,secIndex +
      * figure)); secIndex = secIndex + figure; this.Index =
      * secIndex;
      *
      * //追加常数标志位,并且是一个小数,并且包含E scannerResult =
      * scannerResult.insert(0, '0');
      *
      * }
      *
      * //数字中不包含E的情况 else if(figure != 0 &&
      * (bufferOne.charAt(secIndex + figure) != 'E')) {
      * scannerResult = new
      * StringBuffer(bufferOne.substring(Index,secIndex +
      * figure)); secIndex = secIndex + figure; this.Index =
      * secIndex;
      *
      * //追加常数标志位,并且是一个小数,并且不包含E scannerResult =
      * scannerResult.insert(0, '0'); }
      *******/

    }

    // 直接截取数字
    else {
     scannerResult = new StringBuffer(bufferOne.substring(Index,
       secIndex));
     this.Index = secIndex;

     // 设为标示符
     scannerResult = scannerResult.insert(0, '0');

    }
    break;

   //case 1:
   case 1:

    //System.out.println("enter in 111111111");
    // 需要判断是否为关键字
    while (Character.isLowerCase((bufferOne.charAt(secIndex)))
      || Character.isUpperCase(((bufferOne.charAt(secIndex))))
      || bufferOne.charAt(secIndex) == '_'
      || Character.isDigit(bufferOne.charAt(secIndex))) {
     if (secIndex < bufferOne.length() - 1) {
      secIndex++;
     } else {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 1));
      // scannerResult = scannerResult.insert(0, '2');
      secIndex = bufferOne.length();
      this.Index = bufferOne.length();

      // return scannerResult.toString();
      break;
     }
    }

    /****
     * //判断是否为保留字
     * if(Character.isLowerCase((bufferOne.charAt(secIndex)))) {
     * //判断是否为保留字曾经出现异常
     * if(this.isKeyword(str,bufferOne.substring(Index,secIndex +
     * 1))) { scannerResult = new
     * StringBuffer(bufferOne.substring(Index,secIndex + 1));
     * scannerResult.insert(0, '2'); this.Index = secIndex; break; }
     * } else { isKeyword = false; } }
     *****/
    /**
     * //出现保留字,跳出循环,将保留字返回给主控程序 if(isKeyword == true) { break; }
     *
     * //循环结束后没有遇到保留字 出现异常 scannerResult = new
     * StringBuffer(bufferOne.substring(Index,secIndex)); this.Index
     * = secIndex;
     ******/
    
    //到达该行末尾说明已经截取了单词
    if (secIndex == bufferOne.length()) {

    }
    //如果没有到达该行的末尾
    else {
     scannerResult = new StringBuffer(bufferOne.substring(Index,
       secIndex));
     this.Index = secIndex;
    }

    if (isKeyword(str, scannerResult.toString())) {
     // 是保留字
     scannerResult = scannerResult.insert(0, '7');
    } else {
     // 不是保留字,则是关键字
     scannerResult = scannerResult.insert(0, '2');
    }
    
    //secIndex++;
    this.Index = secIndex;
    break;

   case 3:
    while (bufferOne.charAt(secIndex) == ' ') {
     secIndex++;
    }
    
    this.Index = secIndex;
    break;
    
    
   // 判断算符
   case 4:

    // 判断是否为“==”
    if (ch == '=') {
     // kjkjkjn==
     if (((secIndex + 1) <= bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) == '=') {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 2));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 2;
      this.Index = secIndex;
     } else if ((secIndex + 1) == bufferOne.length()) {
      secIndex = secIndex + 1;
      this.Index = secIndex;
      return new StringBuffer(bufferOne.substring(Index,
        secIndex)).insert(0, '4').toString();
     } else {
      secIndex = secIndex + 1;
      this.Index = secIndex;
      return new StringBuffer(bufferOne.substring(Index,
        secIndex)).insert(0, '4').toString();
     }
    }

    else if (ch == '+') {
     if (((secIndex + 1) <= bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) == '=') {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 2));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 2;
      this.Index = secIndex;
     } else if (((secIndex + 1) < bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) == '+') {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 2));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 2;
      this.Index = secIndex;
     } else if (((secIndex + 1) < bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) != '='
       && bufferOne.charAt(secIndex + 1) != '+') {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 1));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 1;
      this.Index = secIndex;
     }
    }

    else if (ch == '-') {
     if (((secIndex + 1) <= bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) == '-') {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 2));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 2;
      this.Index = secIndex;
     } else if (((secIndex + 1) < bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) == '=') {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 2));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 2;
      this.Index = secIndex;
     } else if (((secIndex + 1) < bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) != '-'
       && bufferOne.charAt(secIndex + 1) != '=') {
      if (Character.isDigit(bufferOne.charAt(secIndex + 1))) {
       // 为减号或者负号
       scannerResult = new StringBuffer(
         bufferOne.substring(Index, secIndex + 1));
       scannerResult = scannerResult.insert(0, '4');
       secIndex = secIndex + 1;
       this.Index = secIndex;
      }

     }
    }

    else if (ch == '*') {
     if (((secIndex + 1) <= bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) == '=') {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 2));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 2;
      this.Index = secIndex;
     }

     else if ((secIndex + 1) == bufferOne.length()) {
      secIndex = secIndex + 1;
      this.Index = secIndex;
      return new StringBuffer(bufferOne.substring(Index,
        secIndex)).insert(0, '4').toString();
     } else {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 1));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 1;
      this.Index = secIndex;
     }
    }

    else if (ch == '/') {
     if (((secIndex + 1) <= (bufferOne.length() - 1) && bufferOne
       .charAt(secIndex + 1) == '=')) {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 2));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 2;
      this.Index = secIndex;
     }

     else if ((secIndex + 1) == bufferOne.length()) {
      secIndex = secIndex + 1;
      this.Index = secIndex;
      return new StringBuffer(bufferOne.substring(Index,
        secIndex)).insert(0, '4').toString();

     } else {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 1));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 1;
      this.Index = secIndex;
     }
    }

    else if (ch == '%') {
     if ((secIndex + 1) <= (bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) == '=') {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 2));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 2;
      this.Index = secIndex;
     }

     else if ((secIndex + 1) == bufferOne.length()) {
      secIndex = secIndex + 1;
      this.Index = secIndex;
      return new StringBuffer(bufferOne.substring(Index,
        secIndex)).insert(0, '4').toString();
     } else {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 1));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 1;
      this.Index = secIndex;
     }
    }

    else if (ch == '!') {
     if ((secIndex + 1) <= (bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) == '=') {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 2));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 2;
      this.Index = secIndex;
     }

     else if ((secIndex + 1) == bufferOne.length()) {
      secIndex = secIndex + 1;
      this.Index = secIndex;
      return new StringBuffer(bufferOne.substring(Index,
        secIndex)).insert(0, '4').toString();
     } else {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 1));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 1;
      this.Index = secIndex;
     }
    }

    else if (ch == '&') {
     if ((secIndex + 1) <= (bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) == '&') {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 2));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 2;
      this.Index = secIndex;
     }

     else if ((secIndex + 1) <= (bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) == '=') {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 2));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 2;
      this.Index = secIndex;
     }

     else if ((secIndex + 1) == bufferOne.length()) {
      secIndex = secIndex + 1;
      this.Index = secIndex;
      return new StringBuffer(bufferOne.substring(Index,
        secIndex)).insert(0, '4').toString();
     } else {
      secIndex = secIndex + 1;
      this.Index = secIndex;
      return new StringBuffer(bufferOne.substring(Index,
        secIndex)).insert(0, '4').toString();
     }
    }

    else if (ch == '|') {
     if ((secIndex + 1) <= (bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) == '=') {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 2));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 2;
      this.Index = secIndex;
     }

     else if ((secIndex + 1) == (bufferOne.length())) {
      secIndex = secIndex + 1;
      this.Index = secIndex;
      return new StringBuffer(bufferOne.substring(Index,
        secIndex)).insert(0, '4').toString();
     } else if ((secIndex + 1) <= (bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) == '|') {
      secIndex = secIndex + 2;
      this.Index = secIndex;
      return new StringBuffer(bufferOne.substring(Index,
        secIndex)).insert(0, '4').toString();
     } else if ((secIndex + 1) <= (bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) != '|') {
      secIndex = secIndex + 1;
      this.Index = secIndex;
      return new StringBuffer(bufferOne.substring(Index,
        secIndex)).insert(0, '4').toString();
     }
     /*****
      * else { scannerResult = new
      * StringBuffer(bufferOne.substring(Index,secIndex + 1));
      * scannerResult = scannerResult.insert(0, 4); secIndex =
      * secIndex + 1; this.Index = secIndex; }
      *****/
    }

    else if (ch == '>') {
     // >=
     if ((secIndex + 1) <= (bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) == '=') {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 2));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 2;
      this.Index = secIndex;
     }

     // >>=,>>>
     else if ((secIndex + 1) <= (bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) == '>') {
      if ((secIndex + 2) <= (bufferOne.length() - 1)
        && bufferOne.charAt(secIndex + 2) == '=') {
       scannerResult = new StringBuffer(
         bufferOne.substring(Index, secIndex + 3));
       scannerResult = scannerResult.insert(0, '4');
       secIndex = secIndex + 3;
       this.Index = secIndex;
      }

      else if ((secIndex + 2) <= (bufferOne.length() - 1)
        && bufferOne.charAt(secIndex + 2) == '>') {
       scannerResult = new StringBuffer(
         bufferOne.substring(Index, secIndex + 3));
       scannerResult = scannerResult.insert(0, '4');
       secIndex = secIndex + 3;
       this.Index = secIndex;
      } else if ((secIndex + 2) <= (bufferOne.length() - 1)
        && bufferOne.charAt(secIndex + 2) != '>'
        && bufferOne.charAt(secIndex + 2) == '=') {
       scannerResult = new StringBuffer(
         bufferOne.substring(Index, secIndex + 2));
       scannerResult = scannerResult.insert(0, '4');
       secIndex = secIndex + 2;
       this.Index = secIndex;
      } else if ((secIndex + 2) == (bufferOne.length())) {
       scannerResult = new StringBuffer(
         bufferOne.substring(Index, secIndex + 2));
       scannerResult = scannerResult.insert(0, '4');
       secIndex = secIndex + 2;
       this.Index = secIndex;
      }

      else {
       // 这种情况按照无符号位移处理
       scannerResult = new StringBuffer(
         bufferOne.substring(Index, secIndex + 2));
       scannerResult = scannerResult.insert(0, '4');
       secIndex = secIndex + 2;
       this.Index = secIndex;
      }
     }

     /****
      * else if(bufferOne.charAt(secIndex + 1) == '>' &&
      * bufferOne.charAt(secIndex + 2) == '>') { scannerResult =
      * new StringBuffer(bufferOne.substring(Index,++secIndex));
      * scannerResult = scannerResult.insert(0, 4); this.Index =
      * secIndex; }
      ****/

     // 纯'>'号
     else {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 1));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 1;
      this.Index = secIndex;
     }
    }

    else if (ch == '<') {
     if ((secIndex + 1) <= (bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) == '=') {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 2));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 2;
      this.Index = secIndex;
     }

     else if ((secIndex + 1) <= (bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) == '<') {
      if ((secIndex + 2) <= (bufferOne.length() - 1)
        && bufferOne.charAt(secIndex + 2) == '=') {
       scannerResult = new StringBuffer(
         bufferOne.substring(Index, secIndex + 3));
       scannerResult = scannerResult.insert(0, '4');
       secIndex = secIndex + 3;
       this.Index = secIndex;
      }

/***
        else if(bufferOne.charAt(secIndex + 1) == '<')
        {
         scannerResult = new StringBuffer(bufferOne.substring(Index,secIndex + 2));
         scannerResult = scannerResult.insert(0, 4);
         secIndex = secIndex + 2;
         this.Index = secIndex;
        }
        ***/

      else if ((secIndex + 2) == (bufferOne.length())) {
       secIndex = secIndex + 2;
       this.Index = secIndex;
       return new StringBuffer(bufferOne.substring(Index,
         secIndex)).insert(0, '4').toString();
      }
     }

     // 纯'<'号
     else {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 1));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 1;
      this.Index = secIndex;
     }
    }

    else if (ch == '^') {
     if ((secIndex + 1) <= (bufferOne.length() - 1)
       && bufferOne.charAt(secIndex + 1) == '=') {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 2));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 2;
      this.Index = secIndex;
     } else if ((secIndex + 1) == (bufferOne.length())) {
      secIndex = secIndex + 1;
      this.Index = secIndex;
      return new StringBuffer(bufferOne.substring(Index,
        secIndex)).insert(0, '4').toString();
     } else {
      scannerResult = new StringBuffer(bufferOne.substring(
        Index, secIndex + 1));
      scannerResult = scannerResult.insert(0, '4');
      secIndex = secIndex + 1;
      this.Index = secIndex;
     }
    }

    break;

   case 5:

    // 如果当前字符是'"'
    if (ch == '"') {
     while (bufferOne.charAt(secIndex) != '"') {
      secIndex++;
     }
     scannerResult = new StringBuffer(bufferOne.substring(this.Index,this.secIndex + 1));
     scannerResult = scannerResult.insert(0, '8');
     this.Index = secIndex;
     
    }else
    {
     scannerResult = new StringBuffer(new Character(ch).toString());
     scannerResult = scannerResult.insert(0, '5');
    }

    secIndex++;
    this.Index = secIndex;
    break;
   case 6:
    scannerResult = new StringBuffer(new Character(ch).toString());
    scannerResult = scannerResult.insert(0, '6');

    secIndex = secIndex + 1;
    this.Index = secIndex;
    break;

   }// switch结束

   break;

  }// while 结束

  return scannerResult.toString();

 }// scanner结束

 private boolean isKeyword(ArrayList<String> str, String s) {
  int i;
  boolean isTrue = false;

  for (i = 0; i <= str.size() - 1; i++) {
   // 注意此处必须使用“equals()方法”,不能使用“==”
   if (s.equals(str.get(i))) {
    isTrue = true;
    break;
   }
  }

  return isTrue;
 }

 public int GetsecIndex() {
  return secIndex;
 }

}

// 一、算术运算符:

// 单目::+(取正)-(取负) ++(自增1) - -(自减1)
// 双目:+ - * / %(取余)
// 三目:a>b?true:false

// 二、关系运算:

// 等于符号:==,不等于符号: != ,大于符号:>, 小于符号:<,大于等于符号: >= ,小于等于符号: <=

// 三、位运算符 逻辑运算符:

// 位运算符 与(&)、非(~)、或(|)、异或(^)
// 逻辑运算符 与(&&)、非(!)、或(||)

// 四、赋值运算符

// = += -= *= /= %= &= ^= |= <<= >>=

// 七 位移运算符

// << 带符号左移 >>带符号右移 >>> 无号右移

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值