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

📄 cifaprocess.java

📁 pl/0语言的词法分析器 cifaCifaMainFrame.java 主类 cifaCifaProcess.java 处理程序
💻 JAVA
字号:
package cifa;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */
import java.util.ArrayList;

public class CifaProcess {

  final String[] keyWords = {
      "CONST", "VAR", "procedure", "begin", "end", "if", "then", "call",
      "while", "do", "write", "read"};
  ArrayList SYM = new ArrayList();
  ArrayList ID = new ArrayList();
  ArrayList NUM = new ArrayList();
  ArrayList errMessage = new ArrayList();

  public CifaProcess() {
  }

  /*public static void main(String args[]) {
    CifaProcess cifaTest = new CifaProcess();
    cifaTest.getSYM("c:=b a");
  }*/

  public void getSYM(String inputString) {
    char[] inputChar = null;

    inputChar = inputString.toCharArray();
    int i = 0;
    while (i < inputChar.length) {
      if (isAlpha(inputChar[i])) {
        int j = i;
        boolean maybeKey = true;
        while (isNum(inputChar[j]) || isAlpha(inputChar[j])) {
          if (isNum(inputChar[j])) {
            maybeKey = false;
          }
          j++;
          if (j >= inputChar.length) {
            break;
          }
        }
        if ( (j - i) >= 10) {
          errMessage.add(
              "Error:The length of identifier or keyword is too long at " +
              inputString + "   (" + i + ")");
          i = inputChar.length - 1;
          break;
        }
        String test = "";
        boolean isKeyWord = false;
        test = inputString.substring(i, j);
        //System.out.println(test);
        if (maybeKey == true) {
          for (int k = 0; k < keyWords.length; k++) {
            if (test.equals(keyWords[k])) {
              isKeyWord = true;
              SYM.add(test + "SYM");
              //System.out.println(test + " is a KeyWord.");
            }
          }
        }
        if (isKeyWord == false) {
          SYM.add("IDENT");
          ID.add(test);
          //System.out.println(test + " is an identifier.");
        }
        i = j;
        //i++;
        continue;
      }

      if (isNum(inputChar[i])) {
        int j = i;
        while (isNum(inputChar[j]) || isAlpha(inputChar[j])) {
          j++;
          if (j >= inputChar.length) {
            break;
          }
        }
        boolean isNumber = true;
        for (int k = i; k < j; k++) {
          if (isAlpha(inputChar[k])) {
            isNumber = false;
          }
        }
        if (isNumber == false) {
          errMessage.add("Error:Unknown identifier at :" + inputString + "   (" +
                         i + ")");
          i = j;
          //i++;
          continue;
        }
        String test = inputString.substring(i, j);
        SYM.add("NUMBER");
        NUM.add(test);
        //System.out.println(test);
        //System.out.println(test + " is a number.");
        i = j;
        //i++;
        continue;
      }

      if (inputChar[i] == '+' || inputChar[i] == '-' || inputChar[i] == '*' ||
          inputChar[i] == '/' || inputChar[i] == ':' || inputChar[i] == '=' ||
          inputChar[i] == '#' || inputChar[i] == '<' || inputChar[i] == '>' ||
          inputChar[i] == ';' || inputChar[i] == ',' || inputChar[i] == '(' ||
          inputChar[i] == ')' || inputChar[i] == '.') {
        switch (inputChar[i]) {
          case '+':
          case '-':
          case '*':
          case '/':
          case '=':
          case '#':
          case ';':
          case ',':
          case '(':
          case ')':
          case '.':
            SYM.add("" + inputChar[i] + "SYM");
            break;
          case ':':
          case '<':
          case '>':
            if (i == inputChar.length - 1) {
              SYM.add("" + inputChar[i] + "SYM");
              break;
            }
            else if (inputChar[i + 1] == '=') {
              SYM.add("" + inputChar[i] + inputChar[i + 1] + "SYM");
              i++;
              break;
            }
            else {
              SYM.add("" + inputChar[i] + "SYM");
              break;
            }
        }
        i++;
        continue;
      }

      if (inputChar[i] == ' ' || inputChar[i] == 0x0D || inputChar[i] == 0x0A) {
        i++;
        continue;
      }

      errMessage.add("Unrecognized character at :" + inputString + "   (" + i +
                     ")");
      i++;
    }

    /*for (int j = 0; j < SYM.size(); j++) {
      System.out.println(SYM.get(j));
         }
         System.out.println();
         for (int j = 0; j < ID.size(); j++) {
      System.out.println(ID.get(j));
         }
         System.out.println();
         for (int j = 0; j < NUM.size(); j++) {
      System.out.println(NUM.get(j));
         }
         System.out.println();
         for (int j = 0; j < errMessage.size(); j++) {
      System.out.println(errMessage.get(j));
         }*/

    //return errMessage;
  }

  boolean isAlpha(char inputChar) {
    if (inputChar <= 'z' && inputChar >= 'A') {
      return true;
    }
    return false;
  }

  boolean isNum(char inputChar) {
    if (inputChar <= '9' && inputChar >= '0') {
      return true;
    }
    return false;
  }

}

⌨️ 快捷键说明

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