expressionparser.java

来自「jpda例子文件」· Java 代码 · 共 2,349 行 · 第 1/5 页

JAVA
2,349
字号
/* * @(#)ExpressionParser.java	1.5 01/12/03 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. *//* Generated By:JavaCC: Do not edit this line. ExpressionParser.java */package com.sun.tools.example.debug.expr;import com.sun.jdi.*;import java.util.Stack;import java.util.List;import java.util.ArrayList;public class ExpressionParser implements ExpressionParserConstants {  Stack stack = new Stack();  VirtualMachine vm = null;  GetFrame frameGetter = null;  private static GetFrame lastFrameGetter;  private static LValue lastLValue;  LValue peek() {    return (LValue)stack.peek();  }  LValue pop() {    return (LValue)stack.pop();  }  void push(LValue lval) {    stack.push(lval);  }  public static Value getMassagedValue() throws ParseException {       return lastLValue.getMassagedValue(lastFrameGetter);  }  public interface GetFrame {        StackFrame get() throws IncompatibleThreadStateException;  }  public static Value evaluate(String expr, VirtualMachine vm,                               GetFrame frameGetter) throws ParseException,                                            InvocationException,                                            InvalidTypeException,                                            ClassNotLoadedException,                                            IncompatibleThreadStateException {        // TODO StringBufferInputStream is deprecated.        java.io.InputStream in = new java.io.StringBufferInputStream(expr);        ExpressionParser parser = new ExpressionParser(in);        parser.vm = vm;        parser.frameGetter = frameGetter;        Value value = null;        parser.Expression();	lastFrameGetter = frameGetter;	lastLValue = parser.pop();	return lastLValue.getValue();  }  public static void main(String args[]) {    ExpressionParser parser;    System.out.print("Java Expression Parser:  ");    if (args.length == 0) {      System.out.println("Reading from standard input . . .");      parser = new ExpressionParser(System.in);    } else if (args.length == 1) {      System.out.println("Reading from file " + args[0] + " . . .");      try {        parser = new ExpressionParser(new java.io.FileInputStream(args[0]));      } catch (java.io.FileNotFoundException e) {        System.out.println("Java Parser Version 1.0.2:  File " +                           args[0] + " not found.");        return;      }    } else {      System.out.println("Usage is one of:");      System.out.println("         java ExpressionParser < inputfile");      System.out.println("OR");      System.out.println("         java ExpressionParser inputfile");      return;    }    try {        parser.Expression();        System.out.print("Java Expression Parser:  ");        System.out.println("Java program parsed successfully.");    } catch (ParseException e) {        System.out.print("Java Expression Parser:  ");        System.out.println("Encountered errors during parse.");    }  }/***************************************** * THE JAVA LANGUAGE GRAMMAR STARTS HERE * *****************************************//* * Type, name and expression syntax follows. */  final public void Type() throws ParseException {    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {    case BOOLEAN:    case BYTE:    case CHAR:    case DOUBLE:    case FLOAT:    case INT:    case LONG:    case SHORT:      PrimitiveType();      break;    case IDENTIFIER:      Name();      break;    default:      jj_la1[0] = jj_gen;      jj_consume_token(-1);      throw new ParseException();    }    label_1:    while (true) {      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {      case LBRACKET:        ;        break;      default:        jj_la1[1] = jj_gen;        break label_1;      }      jj_consume_token(LBRACKET);      jj_consume_token(RBRACKET);    }  }  final public void PrimitiveType() throws ParseException {    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {    case BOOLEAN:      jj_consume_token(BOOLEAN);      break;    case CHAR:      jj_consume_token(CHAR);      break;    case BYTE:      jj_consume_token(BYTE);      break;    case SHORT:      jj_consume_token(SHORT);      break;    case INT:      jj_consume_token(INT);      break;    case LONG:      jj_consume_token(LONG);      break;    case FLOAT:      jj_consume_token(FLOAT);      break;    case DOUBLE:      jj_consume_token(DOUBLE);      break;    default:      jj_la1[2] = jj_gen;      jj_consume_token(-1);      throw new ParseException();    }  }  final public String Name() throws ParseException { StringBuffer sb = new StringBuffer();    jj_consume_token(IDENTIFIER);                 sb.append(token);    label_2:    while (true) {      if (jj_2_1(2)) {        ;      } else {        break label_2;      }      jj_consume_token(DOT);      jj_consume_token(IDENTIFIER);                                    sb.append('.'); sb.append(token);    }          {if (true) return sb.toString();}    throw new Error("Missing return statement in function");  }  final public void NameList() throws ParseException {    Name();    label_3:    while (true) {      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {      case COMMA:        ;        break;      default:        jj_la1[3] = jj_gen;        break label_3;      }      jj_consume_token(COMMA);      Name();    }  }/* * Expression syntax follows. */  final public void Expression() throws ParseException {    if (jj_2_2(2147483647)) {      Assignment();    } else {      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {      case FALSE:      case NEW:      case NULL:      case SUPER:      case THIS:      case TRUE:      case INTEGER_LITERAL:      case FLOATING_POINT_LITERAL:      case CHARACTER_LITERAL:      case STRING_LITERAL:      case IDENTIFIER:      case LPAREN:      case BANG:      case TILDE:      case INCR:      case DECR:      case PLUS:      case MINUS:        ConditionalExpression();        break;      default:        jj_la1[4] = jj_gen;        jj_consume_token(-1);        throw new ParseException();      }    }  }  final public void Assignment() throws ParseException {    PrimaryExpression();    AssignmentOperator();    Expression();          LValue exprVal = pop(); pop().setValue(exprVal); push(exprVal);  }  final public void AssignmentOperator() throws ParseException {    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {    case ASSIGN:      jj_consume_token(ASSIGN);      break;    case STARASSIGN:      jj_consume_token(STARASSIGN);      break;    case SLASHASSIGN:      jj_consume_token(SLASHASSIGN);      break;    case REMASSIGN:      jj_consume_token(REMASSIGN);      break;    case PLUSASSIGN:      jj_consume_token(PLUSASSIGN);      break;    case MINUSASSIGN:      jj_consume_token(MINUSASSIGN);      break;    case LSHIFTASSIGN:      jj_consume_token(LSHIFTASSIGN);      break;    case RSIGNEDSHIFTASSIGN:      jj_consume_token(RSIGNEDSHIFTASSIGN);      break;    case RUNSIGNEDSHIFTASSIGN:      jj_consume_token(RUNSIGNEDSHIFTASSIGN);      break;    case ANDASSIGN:      jj_consume_token(ANDASSIGN);      break;    case XORASSIGN:      jj_consume_token(XORASSIGN);      break;    case ORASSIGN:      jj_consume_token(ORASSIGN);      break;    default:      jj_la1[5] = jj_gen;      jj_consume_token(-1);      throw new ParseException();    }  }  final public void ConditionalExpression() throws ParseException {    ConditionalOrExpression();    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {    case HOOK:      jj_consume_token(HOOK);      Expression();      jj_consume_token(COLON);      ConditionalExpression();                  LValue falseBranch = pop(); LValue trueBranch = pop();                  Value cond = pop().interiorGetValue();                  if (cond instanceof BooleanValue) {                        push(((BooleanValue)cond).booleanValue()?                                        trueBranch : falseBranch);                  } else {                        {if (true) throw new ParseException("Condition must be boolean");}                  }      break;    default:      jj_la1[6] = jj_gen;      ;    }  }  final public void ConditionalOrExpression() throws ParseException {    ConditionalAndExpression();    label_4:    while (true) {      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {      case SC_OR:        ;        break;      default:        jj_la1[7] = jj_gen;        break label_4;      }      jj_consume_token(SC_OR);      ConditionalAndExpression();                          {if (true) throw new ParseException("operation not yet supported");}    }  }  final public void ConditionalAndExpression() throws ParseException {    InclusiveOrExpression();    label_5:    while (true) {      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {      case SC_AND:        ;        break;      default:        jj_la1[8] = jj_gen;        break label_5;      }      jj_consume_token(SC_AND);      InclusiveOrExpression();                          {if (true) throw new ParseException("operation not yet supported");}    }  }  final public void InclusiveOrExpression() throws ParseException {    ExclusiveOrExpression();    label_6:    while (true) {      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {      case BIT_OR:        ;        break;      default:        jj_la1[9] = jj_gen;        break label_6;      }      jj_consume_token(BIT_OR);      ExclusiveOrExpression();                          {if (true) throw new ParseException("operation not yet supported");}    }  }  final public void ExclusiveOrExpression() throws ParseException {    AndExpression();    label_7:    while (true) {      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {      case XOR:        ;        break;      default:        jj_la1[10] = jj_gen;        break label_7;      }      jj_consume_token(XOR);      AndExpression();                          {if (true) throw new ParseException("operation not yet supported");}    }  }  final public void AndExpression() throws ParseException {    EqualityExpression();    label_8:    while (true) {      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {      case BIT_AND:        ;        break;      default:        jj_la1[11] = jj_gen;        break label_8;      }      jj_consume_token(BIT_AND);      EqualityExpression();                          {if (true) throw new ParseException("operation not yet supported");}    }  }  final public void EqualityExpression() throws ParseException { Token tok;    InstanceOfExpression();    label_9:    while (true) {      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {      case EQ:      case NE:        ;        break;      default:        jj_la1[12] = jj_gen;        break label_9;      }      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {      case EQ:        tok = jj_consume_token(EQ);        break;      case NE:        tok = jj_consume_token(NE);        break;      default:        jj_la1[13] = jj_gen;        jj_consume_token(-1);        throw new ParseException();      }      InstanceOfExpression();                  LValue left = pop();                  push( LValue.booleanOperation(vm, tok, pop(), left) );    }  }  final public void InstanceOfExpression() throws ParseException {    RelationalExpression();    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {    case INSTANCEOF:      jj_consume_token(INSTANCEOF);      Type();                          {if (true) throw new ParseException("operation not yet supported");}      break;    default:      jj_la1[14] = jj_gen;      ;    }  }  final public void RelationalExpression() throws ParseException { Token tok;    ShiftExpression();    label_10:    while (true) {      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {      case GT:      case LT:      case LE:      case GE:        ;        break;      default:        jj_la1[15] = jj_gen;        break label_10;      }      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {      case LT:        tok = jj_consume_token(LT);

⌨️ 快捷键说明

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