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

📄 action.java

📁 java语法解释器生成器
💻 JAVA
字号:
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * JFlex 1.4.2                                                             * * Copyright (C) 1998-2008  Gerwin Klein <lsf@jflex.de>                    * * All rights reserved.                                                    * *                                                                         * * This program is free software; you can redistribute it and/or modify    * * it under the terms of the GNU General Public License. See the file      * * COPYRIGHT for more information.                                         * *                                                                         * * This program is distributed in the hope that it will be useful,         * * but WITHOUT ANY WARRANTY; without even the implied warranty of          * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           * * GNU General Public License for more details.                            * *                                                                         * * You should have received a copy of the GNU General Public License along * * with this program; if not, write to the Free Software Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                 * *                                                                         * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */package JFlex;/** * Encapsulates an action in the specification. * * It stores the Java code as String together with a priority (line number in the specification). * * @author Gerwin Klein * @version JFlex 1.4.2, $Revision: 358 $, $Date: 2008-05-27 16:28:29 +1000 (Tue, 27 May 2008) $ */final public class Action {  /** A normal action */  public final static int NORMAL = 0;  /** Action of a lookahead expression r1/r2 with fixed length r1 */  public final static int FIXED_BASE = 1;  /** Action of a lookahead expression r1/r2 with fixed length r2 */  public final static int FIXED_LOOK = 2;  /** Action of a lookahead expression r1/r2 with a finite choice of    *  fixed lengths in r2 */  public final static int FINITE_CHOICE = 3;  /** Action of a general lookahead expression */  public final static int GENERAL_LOOK = 4;  /** Action of the 2nd forward pass for lookahead */    public final static int FORWARD_ACTION = 5;  /** Action of the backward pass for lookahead */    public final static int BACKWARD_ACTION = 6;    /**   * The Java code this Action represents   */  String content;  /**   * The priority (i.e. line number in the specification) of this Action.    */  int priority;  /**   * Which kind of action this is.   * (normal, <code>a/b</code> with fixed length a, fixed length b, etc)   */  private int kind = NORMAL;  /** The length of the lookahead (if fixed) */   private int len;    /** The entry state of the corresponding forward DFA (if general lookahead) */  private int entryState;  /**   * Creates a new Action object with specified content and line number.   *    * @param content    java code   * @param priority   line number   */  public Action(String content, int priority) {    this.content = content.trim();    this.priority = priority;  }    /**   * Creates a new Action object of the specified kind. Only   * accepts FORWARD_ACTION or BACKWARD_ACTION.   *    * @param kind   the kind of action   *    * @see #FORWARD_ACTION   * @see #BACKWARD_ACTION   */  public Action(int kind) {    if (kind != FORWARD_ACTION && kind != BACKWARD_ACTION)      throw new GeneratorException();    this.content = "";    this.priority = Integer.MAX_VALUE;    this.kind = kind;  }    /**   * Compares the priority value of this Action with the specified action.   *   * @param other  the other Action to compare this Action with.   *   * @return this Action if it has higher priority - the specified one, if not.   */  public Action getHigherPriority(Action other) {    if (other == null) return this;    // the smaller the number the higher the priority    if (other.priority > this.priority)       return this;    else      return other;  }  /**   * Returns the String representation of this object.   *    * @return string representation of the action   */  public String toString() {    return "Action (priority "+priority+", lookahead "+kind+") :" +      Out.NL+content; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$  }  /**   * Returns <code>true</code> iff the parameter is an   * Action with the same content as this one.   *   * @param a   the object to compare this Action with   * @return    true if the action strings are equal   */  public boolean isEquiv(Action a) {    return this == a ||            (this.content.equals(a.content) &&           this.kind == a.kind &&            this.len == a.len &&            this.entryState == a.entryState);  }  /**   * Calculate hash value.   *    * @return a hash value for this Action   */  public int hashCode() {    return content.hashCode();  }  /**   * Test for equality to another object.   *    * This action equals another object if the other    * object is an equivalent action.    *    * @param o  the other object.   *    * @see Action#isEquiv(Action)   */  public boolean equals(Object o) {    if (o instanceof Action)       return isEquiv((Action) o);    else      return false;      }    /**   * Return true iff this is action belongs to a general lookahead rule.   *    * @return true if this actions belongs to a general lookahead rule.   */  public boolean isGenLookAction() {    return kind == GENERAL_LOOK;  }    /**   * Return true if code for this is action should be emitted, false   * if it is a BACK/FORWARD lookahead action.   *    * @return true if code should be emitted for this action.   */  public boolean isEmittable() {    return kind != BACKWARD_ACTION && kind != FORWARD_ACTION;  }    /**   * Return kind of lookahead.   */  public int lookAhead() {    return kind;  }  /**   * Sets the lookahead kind and data for this action   *    * @param kind   which kind of lookahead it is   * @param data   the length for fixed length look aheads.   *      */  public void setLookAction(int kind, int data) {    this.kind = kind;    this.len = data;  }    /**   * The length of the lookahead or base if this is a fixed length   * lookahead action.    */  public int getLookLength() {    return len;  }    /**   * Return the corresponding entry state for the forward DFA (if this   * is a general lookahead expression)    *    * @return the forward DFA entry state (+1 is the backward DFA)    */  public int getEntryState() {    return entryState;  }  /**   * Set the corresponding entry state for the forward DFA of this action   * (if this is a general lookahead expression)    *    * @param the entry state for the forward DFA of this action   */  public void setEntryState(int entryState) {    this.entryState = entryState;  }   public Action copyChoice(int length) {    Action a = new Action(this.content, this.priority);    a.setLookAction(FINITE_CHOICE, length);    return a;  }    /**   * String representation of the lookahead kind of this action.   *    * @return the string representation   */  public String lookString() {    switch (kind) {    case NORMAL: return "";    case BACKWARD_ACTION: return "LOOK_BACK";    case FIXED_BASE: return "FIXED_BASE";    case FIXED_LOOK: return "FIXED_LOOK";    case FINITE_CHOICE: return "FINITE_CHOICE";    case FORWARD_ACTION: return "LOOK_FORWARD";    case GENERAL_LOOK: return "LOOK_ACTION";    default: return "unknown lookahead type";    }  }}

⌨️ 快捷键说明

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