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

📄 preprocessor.java

📁 类似QQ的功能
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*******************************************************************************SiJaPP - Simple Java PreProcessorCopyright (C) 2003  Manuel LinsmayerThis program is free software; you can redistribute it and/ormodify it under the terms of the GNU General Public Licenseas published by the Free Software Foundation; either version 2of the License, or (at your option) any later version.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.*******************************************************************************/package sijapp;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.util.Enumeration;import java.util.Hashtable;import java.util.Stack;import java.util.Vector;public class Preprocessor {  // Defines  private Hashtable defines;  private Hashtable localDefines = new Hashtable();  // Input stream  private BufferedReader reader;  // Output stream  private BufferedWriter writer;  // Line counter  private int lineNum;  // Stop flag  private boolean stop;  // Skip flag/stack  private boolean skip;  private Stack skipStack = new Stack();  // Done flag/stack  private boolean done;  private Stack doneStack = new Stack();  // Constructor  public Preprocessor(Hashtable defines) {    this.defines = defines;  }  // Evaluate expression  public Scanner.Token[] evalExpr(Scanner.Token[] tokens) throws SijappException {    // Create token vector    Vector t = new Vector();    for (int i = 0; i < tokens.length; i++) {      t.add(tokens[i]);    }    main: while(true) {      // T_EXPR_PRS_LEFT T_BOOL T_EXPR_PRS_RIGHT      for (int i = 0; i < t.size()-2; i++) {        Scanner.Token t1 = (Scanner.Token) t.get(i);        Scanner.Token t2 = (Scanner.Token) t.get(i+1);        Scanner.Token t3 = (Scanner.Token) t.get(i+2);        if ((t1.getType() == Scanner.Token.T_EXPR_PRS_LEFT) && (t2.getType() == Scanner.Token.T_BOOL) && (t3.getType() == Scanner.Token.T_EXPR_PRS_RIGHT)) {          t.remove(i+2);          t.remove(i+1);          t.remove(i);          t.add(i, t2);          continue main;        }      }      // T_IDENT/T_STRING/T_EXPR_DEF T_EXPR_EQ T_IDENT/T_STRING/T_EXPR_DEF      for (int i = 0; i < t.size()-2; i++) {        Scanner.Token t1 = (Scanner.Token) t.get(i);        Scanner.Token t2 = (Scanner.Token) t.get(i+1);        Scanner.Token t3 = (Scanner.Token) t.get(i+2);        if ((t1.getType() == Scanner.Token.T_IDENT) && (t2.getType() == Scanner.Token.T_EXPR_EQ) && (t3.getType() == Scanner.Token.T_IDENT)) {          t.remove(i+2);          t.remove(i+1);          t.remove(i);          String left = (String) this.localDefines.get(t1.getValue());          String right = (String) this.localDefines.get(t3.getValue());          if (((left == null) && (right != null)) || ((left != null) && (right == null))) {            t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(false)));            continue main;          }          else if ((left == null) && (right == null)) {            t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(true)));            continue main;          }          else {            t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(left.equals(right))));            continue main;          }        }        else if ((t1.getType() == Scanner.Token.T_IDENT) && (t2.getType() == Scanner.Token.T_EXPR_EQ) && (t3.getType() == Scanner.Token.T_STRING)) {          t.remove(i+2);          t.remove(i+1);          t.remove(i);          String left = (String) this.localDefines.get(t1.getValue());          String right = (String) t3.getValue();          if (left == null) {            t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(false)));            continue main;          }          else {            t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(left.equals(right))));            continue main;          }        }        else if ((t1.getType() == Scanner.Token.T_IDENT) && (t2.getType() == Scanner.Token.T_EXPR_EQ) && (t3.getType() == Scanner.Token.T_EXPR_DEF)) {          t.remove(i+2);          t.remove(i+1);          t.remove(i);          t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(this.localDefines.containsKey(t1.getValue()))));          continue main;        }        else if ((t1.getType() == Scanner.Token.T_STRING) && (t2.getType() == Scanner.Token.T_EXPR_EQ) && (t3.getType() == Scanner.Token.T_IDENT)) {          t.remove(i+2);          t.remove(i+1);          t.remove(i);          String right = (String) this.localDefines.get(t1.getValue());          String left = (String) t1.getValue();          if (left == null) {            t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(false)));            continue main;          }          else {            t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(left.equals(right))));            continue main;          }        }        else if ((t1.getType() == Scanner.Token.T_STRING) && (t2.getType() == Scanner.Token.T_EXPR_EQ) && (t3.getType() == Scanner.Token.T_STRING)) {          t.remove(i+2);          t.remove(i+1);          t.remove(i);          String left = (String) t1.getValue();          String right = (String) t3.getValue();          t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(left.equals(right))));          continue main;        }        else if ((t1.getType() == Scanner.Token.T_STRING) && (t2.getType() == Scanner.Token.T_EXPR_EQ) && (t3.getType() == Scanner.Token.T_EXPR_DEF)) {          t.remove(i+2);          t.remove(i+1);          t.remove(i);          t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(true)));          continue main;        }        else if ((t1.getType() == Scanner.Token.T_EXPR_DEF) && (t2.getType() == Scanner.Token.T_EXPR_EQ) && (t3.getType() == Scanner.Token.T_IDENT)) {          t.remove(i+2);          t.remove(i+1);          t.remove(i);          t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(this.localDefines.containsKey(t3.getValue()))));          continue main;        }        else if ((t1.getType() == Scanner.Token.T_EXPR_DEF) && (t2.getType() == Scanner.Token.T_EXPR_EQ) && (t3.getType() == Scanner.Token.T_STRING)) {          t.remove(i+2);          t.remove(i+1);          t.remove(i);          t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(true)));          continue main;        }        else if ((t1.getType() == Scanner.Token.T_EXPR_DEF) && (t2.getType() == Scanner.Token.T_EXPR_EQ) && (t3.getType() == Scanner.Token.T_EXPR_DEF)) {          t.remove(i+2);          t.remove(i+1);          t.remove(i);          t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(true)));          continue main;        }      }      // T_IDENT/T_STRING/T_EXPR_DEF T_EXPR_NEQ T_IDENT/T_STRING/T_EXPR_DEF      for (int i = 0; i < t.size()-2; i++) {        Scanner.Token t1 = (Scanner.Token) t.get(i);        Scanner.Token t2 = (Scanner.Token) t.get(i+1);        Scanner.Token t3 = (Scanner.Token) t.get(i+2);        if ((t1.getType() == Scanner.Token.T_IDENT) && (t2.getType() == Scanner.Token.T_EXPR_NEQ) && (t3.getType() == Scanner.Token.T_IDENT)) {          t.remove(i+2);          t.remove(i+1);          t.remove(i);          String left = (String) this.localDefines.get(t1.getValue());          String right = (String) this.localDefines.get(t3.getValue());          if (((left == null) && (right != null)) || ((left != null) && (right == null))) {            t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(true)));            continue main;          }          else if ((left == null) && (right == null)) {            t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(false)));            continue main;          }          else {            t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(!left.equals(right))));            continue main;          }        }        else if ((t1.getType() == Scanner.Token.T_IDENT) && (t2.getType() == Scanner.Token.T_EXPR_NEQ) && (t3.getType() == Scanner.Token.T_STRING)) {          t.remove(i+2);          t.remove(i+1);          t.remove(i);          String left = (String) this.localDefines.get(t1.getValue());          String right = (String) t3.getValue();          if (left == null) {            t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(true)));            continue main;          }          else {            t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(!left.equals(right))));            continue main;          }        }        else if ((t1.getType() == Scanner.Token.T_IDENT) && (t2.getType() == Scanner.Token.T_EXPR_NEQ) && (t3.getType() == Scanner.Token.T_EXPR_DEF)) {          t.remove(i+2);          t.remove(i+1);          t.remove(i);          t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(!this.localDefines.containsKey(t1.getValue()))));          continue main;        }        else if ((t1.getType() == Scanner.Token.T_STRING) && (t2.getType() == Scanner.Token.T_EXPR_NEQ) && (t3.getType() == Scanner.Token.T_IDENT)) {          t.remove(i+2);          t.remove(i+1);          t.remove(i);          String right = (String) this.localDefines.get(t1.getValue());          String left = (String) t1.getValue();          if (left == null) {            t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(true)));            continue main;          }          else {            t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(!left.equals(right))));            continue main;          }        }        else if ((t1.getType() == Scanner.Token.T_STRING) && (t2.getType() == Scanner.Token.T_EXPR_NEQ) && (t3.getType() == Scanner.Token.T_STRING)) {          t.remove(i+2);          t.remove(i+1);          t.remove(i);          String left = (String) t1.getValue();          String right = (String) t3.getValue();          t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(!left.equals(right))));          continue main;        }        else if ((t1.getType() == Scanner.Token.T_STRING) && (t2.getType() == Scanner.Token.T_EXPR_NEQ) && (t3.getType() == Scanner.Token.T_EXPR_DEF)) {          t.remove(i+2);          t.remove(i+1);          t.remove(i);          t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(false)));          continue main;        }        else if ((t1.getType() == Scanner.Token.T_EXPR_DEF) && (t2.getType() == Scanner.Token.T_EXPR_NEQ) && (t3.getType() == Scanner.Token.T_IDENT)) {          t.remove(i+2);          t.remove(i+1);          t.remove(i);          t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(!this.localDefines.containsKey(t3.getValue()))));          continue main;        }        else if ((t1.getType() == Scanner.Token.T_EXPR_DEF) && (t2.getType() == Scanner.Token.T_EXPR_NEQ) && (t3.getType() == Scanner.Token.T_STRING)) {          t.remove(i+2);          t.remove(i+1);          t.remove(i);          t.add(i, new Scanner.Token(Scanner.Token.T_BOOL, new Boolean(false)));          continue main;        }        else if ((t1.getType() == Scanner.Token.T_EXPR_DEF) && (t2.getType() == Scanner.Token.T_EXPR_NEQ) && (t3.getType() == Scanner.Token.T_EXPR_DEF)) {          t.remove(i+2);          t.remove(i+1);

⌨️ 快捷键说明

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