org.nfunk.jep.Parser Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jep Show documentation
Show all versions of jep Show documentation
JEP is a Java library for parsing and evaluating mathematical expressions.
The newest version!
/* Generated By:JJTree&JavaCC: Do not edit this line. Parser.java */
package org.nfunk.jep;
import java.util.Vector;
import org.nfunk.jep.function.*;
import org.nfunk.jep.type.*;
public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants, ParserConstants {/*@bgen(jjtree)*/
protected JJTParserState jjtree = new JJTParserState();private JEP jep;
private SymbolTable symTab;
private OperatorSet opSet;
private int initialTokenManagerState = DEFAULT;
public Node parseStream(java.io.Reader stream, JEP jep_in)
throws ParseException {
restart(stream,jep_in);
// Parse the expression, and return the
enable_tracing();
Node node = Start();
if (node == null) throw new ParseException("No expression entered");
return node.jjtGetChild(0);
}
/**
* Restart the parse with the given stream.
* @since 2.3.0 beta 1
*/
public void restart(java.io.Reader stream, JEP jep_in)
{
ReInit(stream);
this.token_source.SwitchTo(initialTokenManagerState);
jep = jep_in;
symTab = jep.getSymbolTable();
opSet = jep.getOperatorSet();
}
/**
* Continue parsing without re-initilising stream.
* Allows renetrancy of parser so that strings like
* "x=1; y=2; z=3;" can be parsed.
* When a semi colon is encountered parsing finishes leaving the rest of the string unparsed.
* Parsing can be resumed from the current position by using this method.
* For example
*
* XJep j = new XJep();
* Parser parse = j.getParse();
* StringReader sr = new StringReader("x=1; y=2; z=3;");
* parse.restart(sr,j);
* Node node;
* try {
* while((node = j.continueParse())!=null) {
* j.println(node);
* } }catch(ParseException e) {}
*
*/
public Node continueParse() throws ParseException
{
ASTStart node = Start();
if (node==null) return null;
return node.jjtGetChild(0);
}
private void addToErrorList(String errorStr) {
jep.errorList.addElement(errorStr);
}
/**
* Sets the initial state that the token manager is in.
* Can be used to change how x.x is interpreted, either as a single
* identifier (DEFAULT) or as x x (NO_DOT_IN_IDENTIFIERS)
* @param state the state to be in. Currently the only legal values are DEFAULT and NO_DOT_IN_IDENTIFIER
*/
public void setInitialTokenManagerState(int state)
{
initialTokenManagerState = state;
}
/**
* Translate all escape sequences to characters. Inspired by Rob Millar's
* unescape() method in rcm.util.Str fron the Web Sphinx project.
*
* @param inputStr String containing escape characters.
* @return String with all escape sequences replaced.
*/
private String replaceEscape(String inputStr) {
int len = inputStr.length();
int p = 0;
int i;
String metachars = "tnrbf\\\"'";
String chars = "\t\n\r\b\f\\\"'";
StringBuffer output = new StringBuffer();
while ((i = inputStr.indexOf('\\', p)) != -1) {
output.append(inputStr.substring(p, i));
if (i+1 == len) break;
// find metacharacter
char metac = inputStr.charAt(i+1);
// find the index of the metac
int k = metachars.indexOf(metac);
if (k == -1) {
// didn't find the metachar, leave sequence as found.
// This code should be unreachable if the parser
// is functioning properly because strings containing
// unknown escape characters should not be accepted.
output.append('\\');
output.append(metac);
} else {
// its corresponding true char
output.append(chars.charAt(k));
}
// skip over both escape character & metacharacter
p = i + 2;
}
// add the end of the input string to the output
if (p < len)
output.append(inputStr.substring(p));
return output.toString();
}
/***************************************************************
GRAMMAR START
***************************************************************/
final public ASTStart Start() throws ParseException {
/*@bgen(jjtree) Start */
ASTStart jjtn000 = new ASTStart(JJTSTART);
boolean jjtc000 = true;
jjtree.openNodeScope(jjtn000);
try {
if (jj_2_1(1)) {
Expression();
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case 0:
jj_consume_token(0);
break;
case SEMI:
jj_consume_token(SEMI);
break;
default:
jj_la1[0] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
jjtree.closeNodeScope(jjtn000, true);
jjtc000 = false;
{if (true) return jjtn000;}
} else {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case 0:
case SEMI:
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case 0:
jj_consume_token(0);
break;
case SEMI:
jj_consume_token(SEMI);
break;
default:
jj_la1[1] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
jjtree.closeNodeScope(jjtn000, true);
jjtc000 = false;
// njf - The next line is commented out in 2.3.0 since
// two "No expression entered" errors are reported
// in EvaluatorVisitor and Console (one from here
// the other from ParseStream() )
// Decided to just return null, and handle the error
// in ParseStream.
// addToErrorList("No expression entered");
{if (true) return null;}
break;
default:
jj_la1[2] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
} catch (Throwable jjte000) {
if (jjtc000) {
jjtree.clearNodeScope(jjtn000);
jjtc000 = false;
} else {
jjtree.popNode();
}
if (jjte000 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte000;}
}
if (jjte000 instanceof ParseException) {
{if (true) throw (ParseException)jjte000;}
}
{if (true) throw (Error)jjte000;}
} finally {
if (jjtc000) {
jjtree.closeNodeScope(jjtn000, true);
}
}
throw new Error("Missing return statement in function");
}
// Expresions can be like
// x=3
// x=y=3 parsed as x=(y=3)
final public void Expression() throws ParseException {
if (jj_2_2(2147483647)) {
AssignExpression();
} else if (jj_2_3(1)) {
RightExpression();
} else {
jj_consume_token(-1);
throw new ParseException();
}
}
final public void AssignExpression() throws ParseException {
ASTFunNode jjtn001 = new ASTFunNode(JJTFUNNODE);
boolean jjtc001 = true;
jjtree.openNodeScope(jjtn001);
try {
LValue();
jj_consume_token(ASSIGN);
Expression();
jjtree.closeNodeScope(jjtn001, 2);
jjtc001 = false;
if (!jep.getAllowAssignment()) {if (true) throw new ParseException(
"Syntax Error (assignment not enabled)");}
jjtn001.setOperator(opSet.getAssign());
} catch (Throwable jjte001) {
if (jjtc001) {
jjtree.clearNodeScope(jjtn001);
jjtc001 = false;
} else {
jjtree.popNode();
}
if (jjte001 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte001;}
}
if (jjte001 instanceof ParseException) {
{if (true) throw (ParseException)jjte001;}
}
{if (true) throw (Error)jjte001;}
} finally {
if (jjtc001) {
jjtree.closeNodeScope(jjtn001, 2);
}
}
}
final public void RightExpression() throws ParseException {
OrExpression();
}
final public void OrExpression() throws ParseException {
AndExpression();
label_1:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case OR:
;
break;
default:
jj_la1[3] = jj_gen;
break label_1;
}
ASTFunNode jjtn001 = new ASTFunNode(JJTFUNNODE);
boolean jjtc001 = true;
jjtree.openNodeScope(jjtn001);
try {
jj_consume_token(OR);
AndExpression();
jjtree.closeNodeScope(jjtn001, 2);
jjtc001 = false;
jjtn001.setOperator(opSet.getOr());
} catch (Throwable jjte001) {
if (jjtc001) {
jjtree.clearNodeScope(jjtn001);
jjtc001 = false;
} else {
jjtree.popNode();
}
if (jjte001 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte001;}
}
if (jjte001 instanceof ParseException) {
{if (true) throw (ParseException)jjte001;}
}
{if (true) throw (Error)jjte001;}
} finally {
if (jjtc001) {
jjtree.closeNodeScope(jjtn001, 2);
}
}
}
}
final public void AndExpression() throws ParseException {
EqualExpression();
label_2:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case AND:
;
break;
default:
jj_la1[4] = jj_gen;
break label_2;
}
ASTFunNode jjtn001 = new ASTFunNode(JJTFUNNODE);
boolean jjtc001 = true;
jjtree.openNodeScope(jjtn001);
try {
jj_consume_token(AND);
EqualExpression();
jjtree.closeNodeScope(jjtn001, 2);
jjtc001 = false;
jjtn001.setOperator(opSet.getAnd());
} catch (Throwable jjte001) {
if (jjtc001) {
jjtree.clearNodeScope(jjtn001);
jjtc001 = false;
} else {
jjtree.popNode();
}
if (jjte001 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte001;}
}
if (jjte001 instanceof ParseException) {
{if (true) throw (ParseException)jjte001;}
}
{if (true) throw (Error)jjte001;}
} finally {
if (jjtc001) {
jjtree.closeNodeScope(jjtn001, 2);
}
}
}
}
final public void EqualExpression() throws ParseException {
RelationalExpression();
label_3:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case EQ:
case NE:
;
break;
default:
jj_la1[5] = jj_gen;
break label_3;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case NE:
ASTFunNode jjtn001 = new ASTFunNode(JJTFUNNODE);
boolean jjtc001 = true;
jjtree.openNodeScope(jjtn001);
try {
jj_consume_token(NE);
RelationalExpression();
jjtree.closeNodeScope(jjtn001, 2);
jjtc001 = false;
jjtn001.setOperator(opSet.getNE());
} catch (Throwable jjte001) {
if (jjtc001) {
jjtree.clearNodeScope(jjtn001);
jjtc001 = false;
} else {
jjtree.popNode();
}
if (jjte001 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte001;}
}
if (jjte001 instanceof ParseException) {
{if (true) throw (ParseException)jjte001;}
}
{if (true) throw (Error)jjte001;}
} finally {
if (jjtc001) {
jjtree.closeNodeScope(jjtn001, 2);
}
}
break;
case EQ:
ASTFunNode jjtn002 = new ASTFunNode(JJTFUNNODE);
boolean jjtc002 = true;
jjtree.openNodeScope(jjtn002);
try {
jj_consume_token(EQ);
RelationalExpression();
jjtree.closeNodeScope(jjtn002, 2);
jjtc002 = false;
jjtn002.setOperator(opSet.getEQ());
} catch (Throwable jjte002) {
if (jjtc002) {
jjtree.clearNodeScope(jjtn002);
jjtc002 = false;
} else {
jjtree.popNode();
}
if (jjte002 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte002;}
}
if (jjte002 instanceof ParseException) {
{if (true) throw (ParseException)jjte002;}
}
{if (true) throw (Error)jjte002;}
} finally {
if (jjtc002) {
jjtree.closeNodeScope(jjtn002, 2);
}
}
break;
default:
jj_la1[6] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
}
final public void RelationalExpression() throws ParseException {
AdditiveExpression();
label_4:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case GT:
case LT:
case LE:
case GE:
;
break;
default:
jj_la1[7] = jj_gen;
break label_4;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case LT:
ASTFunNode jjtn001 = new ASTFunNode(JJTFUNNODE);
boolean jjtc001 = true;
jjtree.openNodeScope(jjtn001);
try {
jj_consume_token(LT);
AdditiveExpression();
jjtree.closeNodeScope(jjtn001, 2);
jjtc001 = false;
jjtn001.setOperator(opSet.getLT());
} catch (Throwable jjte001) {
if (jjtc001) {
jjtree.clearNodeScope(jjtn001);
jjtc001 = false;
} else {
jjtree.popNode();
}
if (jjte001 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte001;}
}
if (jjte001 instanceof ParseException) {
{if (true) throw (ParseException)jjte001;}
}
{if (true) throw (Error)jjte001;}
} finally {
if (jjtc001) {
jjtree.closeNodeScope(jjtn001, 2);
}
}
break;
case GT:
ASTFunNode jjtn002 = new ASTFunNode(JJTFUNNODE);
boolean jjtc002 = true;
jjtree.openNodeScope(jjtn002);
try {
jj_consume_token(GT);
AdditiveExpression();
jjtree.closeNodeScope(jjtn002, 2);
jjtc002 = false;
jjtn002.setOperator(opSet.getGT());
} catch (Throwable jjte002) {
if (jjtc002) {
jjtree.clearNodeScope(jjtn002);
jjtc002 = false;
} else {
jjtree.popNode();
}
if (jjte002 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte002;}
}
if (jjte002 instanceof ParseException) {
{if (true) throw (ParseException)jjte002;}
}
{if (true) throw (Error)jjte002;}
} finally {
if (jjtc002) {
jjtree.closeNodeScope(jjtn002, 2);
}
}
break;
case LE:
ASTFunNode jjtn003 = new ASTFunNode(JJTFUNNODE);
boolean jjtc003 = true;
jjtree.openNodeScope(jjtn003);
try {
jj_consume_token(LE);
AdditiveExpression();
jjtree.closeNodeScope(jjtn003, 2);
jjtc003 = false;
jjtn003.setOperator(opSet.getLE());
} catch (Throwable jjte003) {
if (jjtc003) {
jjtree.clearNodeScope(jjtn003);
jjtc003 = false;
} else {
jjtree.popNode();
}
if (jjte003 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte003;}
}
if (jjte003 instanceof ParseException) {
{if (true) throw (ParseException)jjte003;}
}
{if (true) throw (Error)jjte003;}
} finally {
if (jjtc003) {
jjtree.closeNodeScope(jjtn003, 2);
}
}
break;
case GE:
ASTFunNode jjtn004 = new ASTFunNode(JJTFUNNODE);
boolean jjtc004 = true;
jjtree.openNodeScope(jjtn004);
try {
jj_consume_token(GE);
AdditiveExpression();
jjtree.closeNodeScope(jjtn004, 2);
jjtc004 = false;
jjtn004.setOperator(opSet.getGE());
} catch (Throwable jjte004) {
if (jjtc004) {
jjtree.clearNodeScope(jjtn004);
jjtc004 = false;
} else {
jjtree.popNode();
}
if (jjte004 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte004;}
}
if (jjte004 instanceof ParseException) {
{if (true) throw (ParseException)jjte004;}
}
{if (true) throw (Error)jjte004;}
} finally {
if (jjtc004) {
jjtree.closeNodeScope(jjtn004, 2);
}
}
break;
default:
jj_la1[8] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
}
final public void AdditiveExpression() throws ParseException {
MultiplicativeExpression();
label_5:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case PLUS:
case MINUS:
;
break;
default:
jj_la1[9] = jj_gen;
break label_5;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case PLUS:
ASTFunNode jjtn001 = new ASTFunNode(JJTFUNNODE);
boolean jjtc001 = true;
jjtree.openNodeScope(jjtn001);
try {
jj_consume_token(PLUS);
MultiplicativeExpression();
jjtree.closeNodeScope(jjtn001, 2);
jjtc001 = false;
jjtn001.setOperator(opSet.getAdd());
} catch (Throwable jjte001) {
if (jjtc001) {
jjtree.clearNodeScope(jjtn001);
jjtc001 = false;
} else {
jjtree.popNode();
}
if (jjte001 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte001;}
}
if (jjte001 instanceof ParseException) {
{if (true) throw (ParseException)jjte001;}
}
{if (true) throw (Error)jjte001;}
} finally {
if (jjtc001) {
jjtree.closeNodeScope(jjtn001, 2);
}
}
break;
case MINUS:
ASTFunNode jjtn002 = new ASTFunNode(JJTFUNNODE);
boolean jjtc002 = true;
jjtree.openNodeScope(jjtn002);
try {
jj_consume_token(MINUS);
MultiplicativeExpression();
jjtree.closeNodeScope(jjtn002, 2);
jjtc002 = false;
jjtn002.setOperator(opSet.getSubtract());
} catch (Throwable jjte002) {
if (jjtc002) {
jjtree.clearNodeScope(jjtn002);
jjtc002 = false;
} else {
jjtree.popNode();
}
if (jjte002 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte002;}
}
if (jjte002 instanceof ParseException) {
{if (true) throw (ParseException)jjte002;}
}
{if (true) throw (Error)jjte002;}
} finally {
if (jjtc002) {
jjtree.closeNodeScope(jjtn002, 2);
}
}
break;
default:
jj_la1[10] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
}
final public void MultiplicativeExpression() throws ParseException {
UnaryExpression();
label_6:
while (true) {
if (jj_2_4(1)) {
;
} else {
break label_6;
}
if (jj_2_5(1)) {
ASTFunNode jjtn001 = new ASTFunNode(JJTFUNNODE);
boolean jjtc001 = true;
jjtree.openNodeScope(jjtn001);
try {
PowerExpression();
jjtree.closeNodeScope(jjtn001, 2);
jjtc001 = false;
if (!jep.implicitMul) {if (true) throw new ParseException(
"Syntax Error (implicit multiplication not enabled)");}
jjtn001.setOperator(opSet.getMultiply());
} catch (Throwable jjte001) {
if (jjtc001) {
jjtree.clearNodeScope(jjtn001);
jjtc001 = false;
} else {
jjtree.popNode();
}
if (jjte001 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte001;}
}
if (jjte001 instanceof ParseException) {
{if (true) throw (ParseException)jjte001;}
}
{if (true) throw (Error)jjte001;}
} finally {
if (jjtc001) {
jjtree.closeNodeScope(jjtn001, 2);
}
}
} else {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case MUL:
ASTFunNode jjtn002 = new ASTFunNode(JJTFUNNODE);
boolean jjtc002 = true;
jjtree.openNodeScope(jjtn002);
try {
jj_consume_token(MUL);
UnaryExpression();
jjtree.closeNodeScope(jjtn002, 2);
jjtc002 = false;
jjtn002.setOperator(opSet.getMultiply());
} catch (Throwable jjte002) {
if (jjtc002) {
jjtree.clearNodeScope(jjtn002);
jjtc002 = false;
} else {
jjtree.popNode();
}
if (jjte002 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte002;}
}
if (jjte002 instanceof ParseException) {
{if (true) throw (ParseException)jjte002;}
}
{if (true) throw (Error)jjte002;}
} finally {
if (jjtc002) {
jjtree.closeNodeScope(jjtn002, 2);
}
}
break;
case DOT:
ASTFunNode jjtn003 = new ASTFunNode(JJTFUNNODE);
boolean jjtc003 = true;
jjtree.openNodeScope(jjtn003);
try {
jj_consume_token(DOT);
UnaryExpression();
jjtree.closeNodeScope(jjtn003, 2);
jjtc003 = false;
jjtn003.setOperator(opSet.getDot());
} catch (Throwable jjte003) {
if (jjtc003) {
jjtree.clearNodeScope(jjtn003);
jjtc003 = false;
} else {
jjtree.popNode();
}
if (jjte003 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte003;}
}
if (jjte003 instanceof ParseException) {
{if (true) throw (ParseException)jjte003;}
}
{if (true) throw (Error)jjte003;}
} finally {
if (jjtc003) {
jjtree.closeNodeScope(jjtn003, 2);
}
}
break;
case CROSS:
ASTFunNode jjtn004 = new ASTFunNode(JJTFUNNODE);
boolean jjtc004 = true;
jjtree.openNodeScope(jjtn004);
try {
jj_consume_token(CROSS);
UnaryExpression();
jjtree.closeNodeScope(jjtn004, 2);
jjtc004 = false;
jjtn004.setOperator(opSet.getCross());
} catch (Throwable jjte004) {
if (jjtc004) {
jjtree.clearNodeScope(jjtn004);
jjtc004 = false;
} else {
jjtree.popNode();
}
if (jjte004 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte004;}
}
if (jjte004 instanceof ParseException) {
{if (true) throw (ParseException)jjte004;}
}
{if (true) throw (Error)jjte004;}
} finally {
if (jjtc004) {
jjtree.closeNodeScope(jjtn004, 2);
}
}
break;
case DIV:
ASTFunNode jjtn005 = new ASTFunNode(JJTFUNNODE);
boolean jjtc005 = true;
jjtree.openNodeScope(jjtn005);
try {
jj_consume_token(DIV);
UnaryExpression();
jjtree.closeNodeScope(jjtn005, 2);
jjtc005 = false;
jjtn005.setOperator(opSet.getDivide());
} catch (Throwable jjte005) {
if (jjtc005) {
jjtree.clearNodeScope(jjtn005);
jjtc005 = false;
} else {
jjtree.popNode();
}
if (jjte005 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte005;}
}
if (jjte005 instanceof ParseException) {
{if (true) throw (ParseException)jjte005;}
}
{if (true) throw (Error)jjte005;}
} finally {
if (jjtc005) {
jjtree.closeNodeScope(jjtn005, 2);
}
}
break;
case MOD:
ASTFunNode jjtn006 = new ASTFunNode(JJTFUNNODE);
boolean jjtc006 = true;
jjtree.openNodeScope(jjtn006);
try {
jj_consume_token(MOD);
UnaryExpression();
jjtree.closeNodeScope(jjtn006, 2);
jjtc006 = false;
jjtn006.setOperator(opSet.getMod());
} catch (Throwable jjte006) {
if (jjtc006) {
jjtree.clearNodeScope(jjtn006);
jjtc006 = false;
} else {
jjtree.popNode();
}
if (jjte006 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte006;}
}
if (jjte006 instanceof ParseException) {
{if (true) throw (ParseException)jjte006;}
}
{if (true) throw (Error)jjte006;}
} finally {
if (jjtc006) {
jjtree.closeNodeScope(jjtn006, 2);
}
}
break;
default:
jj_la1[11] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
}
}
final public void UnaryExpression() throws ParseException {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case PLUS:
jj_consume_token(PLUS);
UnaryExpression();
break;
case MINUS:
ASTFunNode jjtn001 = new ASTFunNode(JJTFUNNODE);
boolean jjtc001 = true;
jjtree.openNodeScope(jjtn001);
try {
jj_consume_token(MINUS);
UnaryExpression();
jjtree.closeNodeScope(jjtn001, 1);
jjtc001 = false;
jjtn001.setOperator(opSet.getUMinus());
} catch (Throwable jjte001) {
if (jjtc001) {
jjtree.clearNodeScope(jjtn001);
jjtc001 = false;
} else {
jjtree.popNode();
}
if (jjte001 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte001;}
}
if (jjte001 instanceof ParseException) {
{if (true) throw (ParseException)jjte001;}
}
{if (true) throw (Error)jjte001;}
} finally {
if (jjtc001) {
jjtree.closeNodeScope(jjtn001, 1);
}
}
break;
case NOT:
ASTFunNode jjtn002 = new ASTFunNode(JJTFUNNODE);
boolean jjtc002 = true;
jjtree.openNodeScope(jjtn002);
try {
jj_consume_token(NOT);
UnaryExpression();
jjtree.closeNodeScope(jjtn002, 1);
jjtc002 = false;
jjtn002.setOperator(opSet.getNot());
} catch (Throwable jjte002) {
if (jjtc002) {
jjtree.clearNodeScope(jjtn002);
jjtc002 = false;
} else {
jjtree.popNode();
}
if (jjte002 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte002;}
}
if (jjte002 instanceof ParseException) {
{if (true) throw (ParseException)jjte002;}
}
{if (true) throw (Error)jjte002;}
} finally {
if (jjtc002) {
jjtree.closeNodeScope(jjtn002, 1);
}
}
break;
default:
jj_la1[12] = jj_gen;
if (jj_2_6(1)) {
PowerExpression();
} else {
jj_consume_token(-1);
throw new ParseException();
}
}
}
final public void PowerExpression() throws ParseException {
UnaryExpressionNotPlusMinus();
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case POWER:
ASTFunNode jjtn001 = new ASTFunNode(JJTFUNNODE);
boolean jjtc001 = true;
jjtree.openNodeScope(jjtn001);
try {
jj_consume_token(POWER);
UnaryExpression();
jjtree.closeNodeScope(jjtn001, 2);
jjtc001 = false;
jjtn001.setOperator(opSet.getPower());
} catch (Throwable jjte001) {
if (jjtc001) {
jjtree.clearNodeScope(jjtn001);
jjtc001 = false;
} else {
jjtree.popNode();
}
if (jjte001 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte001;}
}
if (jjte001 instanceof ParseException) {
{if (true) throw (ParseException)jjte001;}
}
{if (true) throw (Error)jjte001;}
} finally {
if (jjtc001) {
jjtree.closeNodeScope(jjtn001, 2);
}
}
break;
default:
jj_la1[13] = jj_gen;
;
}
}
final public void UnaryExpressionNotPlusMinus() throws ParseException {
String identString = "";
int type;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case INTEGER_LITERAL:
case FLOATING_POINT_LITERAL:
case STRING_LITERAL:
AnyConstant();
break;
default:
jj_la1[14] = jj_gen;
if (jj_2_7(2147483647)) {
ArrayAccess();
} else if ((getToken(1).kind == INDENTIFIER1 || getToken(1).kind == INDENTIFIER2) &&
jep.funTab.containsKey(getToken(1).image)) {
Function();
} else {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case INDENTIFIER1:
case INDENTIFIER2:
Variable();
break;
case LRND:
jj_consume_token(LRND);
Expression();
jj_consume_token(RRND);
break;
case LSQ:
ListExpression();
break;
default:
jj_la1[15] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
}
}
final public void ListExpression() throws ParseException {
/*@bgen(jjtree) FunNode */
ASTFunNode jjtn000 = new ASTFunNode(JJTFUNNODE);
boolean jjtc000 = true;
jjtree.openNodeScope(jjtn000);jjtn000.setOperator(opSet.getList());
try {
jj_consume_token(LSQ);
Expression();
label_7:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case COMMA:
;
break;
default:
jj_la1[16] = jj_gen;
break label_7;
}
jj_consume_token(COMMA);
Expression();
}
jj_consume_token(RSQ);
} catch (Throwable jjte000) {
if (jjtc000) {
jjtree.clearNodeScope(jjtn000);
jjtc000 = false;
} else {
jjtree.popNode();
}
if (jjte000 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte000;}
}
if (jjte000 instanceof ParseException) {
{if (true) throw (ParseException)jjte000;}
}
{if (true) throw (Error)jjte000;}
} finally {
if (jjtc000) {
jjtree.closeNodeScope(jjtn000, true);
}
}
}
/*
void RangeExpression() #FunNode:
{
jjtThis.setOperator(opSet.getRange());
}
{
Expression() ( Expression() )+
}
*/
final public void LValue() throws ParseException {
if (jj_2_8(2147483647)) {
ArrayAccess();
} else {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case INDENTIFIER1:
case INDENTIFIER2:
Variable();
break;
default:
jj_la1[17] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
}
final public void ArrayAccess() throws ParseException {
Variable();
ListExpression();
ASTFunNode jjtn001 = new ASTFunNode(JJTFUNNODE);
boolean jjtc001 = true;
jjtree.openNodeScope(jjtn001);
try {
jjtree.closeNodeScope(jjtn001, 2);
jjtc001 = false;
jjtn001.setOperator(opSet.getElement());
} finally {
if (jjtc001) {
jjtree.closeNodeScope(jjtn001, 2);
}
}
}
final public void Variable() throws ParseException {
String identString = "";
ASTVarNode jjtn001 = new ASTVarNode(JJTVARNODE);
boolean jjtc001 = true;
jjtree.openNodeScope(jjtn001);
try {
identString = Identifier();
jjtree.closeNodeScope(jjtn001, true);
jjtc001 = false;
if (symTab.containsKey(identString)) {
jjtn001.setVar(symTab.getVar(identString));
} else {
if (jep.allowUndeclared) {
jjtn001.setVar(symTab.makeVarIfNeeded(identString));
} else {
addToErrorList("Unrecognized symbol \"" + identString +"\"");
}
}
} catch (Throwable jjte001) {
if (jjtc001) {
jjtree.clearNodeScope(jjtn001);
jjtc001 = false;
} else {
jjtree.popNode();
}
if (jjte001 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte001;}
}
if (jjte001 instanceof ParseException) {
{if (true) throw (ParseException)jjte001;}
}
{if (true) throw (Error)jjte001;}
} finally {
if (jjtc001) {
jjtree.closeNodeScope(jjtn001, true);
}
}
}
final public void Function() throws ParseException {
int reqArguments = 0;
String identString = "";
ASTFunNode jjtn001 = new ASTFunNode(JJTFUNNODE);
boolean jjtc001 = true;
jjtree.openNodeScope(jjtn001);
try {
identString = Identifier();
if (jep.funTab.containsKey(identString)) {
//Set number of required arguments
reqArguments =
((PostfixMathCommandI)jep.funTab.get(identString)).getNumberOfParameters();
jjtn001.setFunction(identString,
(PostfixMathCommandI)jep.funTab.get(identString));
} else {
addToErrorList("!!! Unrecognized function \"" + identString +"\"");
}
jj_consume_token(LRND);
ArgumentList(reqArguments, identString);
jj_consume_token(RRND);
} catch (Throwable jjte001) {
if (jjtc001) {
jjtree.clearNodeScope(jjtn001);
jjtc001 = false;
} else {
jjtree.popNode();
}
if (jjte001 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte001;}
}
if (jjte001 instanceof ParseException) {
{if (true) throw (ParseException)jjte001;}
}
{if (true) throw (Error)jjte001;}
} finally {
if (jjtc001) {
jjtree.closeNodeScope(jjtn001, true);
}
}
}
final public void ArgumentList(int reqArguments, String functionName) throws ParseException {
int count = 0;
String errorStr = "";
if (jj_2_9(1)) {
Expression();
count++;
label_8:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case COMMA:
;
break;
default:
jj_la1[18] = jj_gen;
break label_8;
}
jj_consume_token(COMMA);
Expression();
count++;
}
} else {
;
}
if(reqArguments == -1) {
if(!((PostfixMathCommandI)jep.funTab.get(functionName)).checkNumberOfParameters(count))
{
errorStr = "Function \"" + functionName +"\" illegal number of arguments " + count;
addToErrorList(errorStr);
}
}
else if (reqArguments != count) {
errorStr = "Function \"" + functionName +"\" requires "
+ reqArguments + " parameter";
if (reqArguments!=1) errorStr += "s";
addToErrorList(errorStr);
}
}
final public String Identifier() throws ParseException {
Token t;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case INDENTIFIER1:
t = jj_consume_token(INDENTIFIER1);
break;
case INDENTIFIER2:
t = jj_consume_token(INDENTIFIER2);
break;
default:
jj_la1[19] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
{if (true) return t.image;}
throw new Error("Missing return statement in function");
}
final public void AnyConstant() throws ParseException {
/*@bgen(jjtree) Constant */
ASTConstant jjtn000 = new ASTConstant(JJTCONSTANT);
boolean jjtc000 = true;
jjtree.openNodeScope(jjtn000);Token t;
Object value;
try {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case STRING_LITERAL:
t = jj_consume_token(STRING_LITERAL);
jjtree.closeNodeScope(jjtn000, true);
jjtc000 = false;
// strip away double quotes at end of string
String temp = (t.image).substring(1,t.image.length()-1);
// replace escape characters
temp = replaceEscape(temp);
jjtn000.setValue(temp);
break;
case INTEGER_LITERAL:
case FLOATING_POINT_LITERAL:
value = RealConstant();
jjtree.closeNodeScope(jjtn000, true);
jjtc000 = false;
jjtn000.setValue(value);
// }
// |
// value = Array() {
// jjtThis.setValue(value);
break;
default:
jj_la1[20] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
} catch (Throwable jjte000) {
if (jjtc000) {
jjtree.clearNodeScope(jjtn000);
jjtc000 = false;
} else {
jjtree.popNode();
}
if (jjte000 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte000;}
}
if (jjte000 instanceof ParseException) {
{if (true) throw (ParseException)jjte000;}
}
{if (true) throw (Error)jjte000;}
} finally {
if (jjtc000) {
jjtree.closeNodeScope(jjtn000, true);
}
}
}
/*
Vector Array() :
{
Object value;
Vector result = new Vector();
}
{
value = RealConstant()
{
result.addElement(value);
}
(
value = RealConstant()
{
result.addElement(value);
}
)*
{
return result;
}
}
*/
final public Object RealConstant() throws ParseException {
Token t;
Object value;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case INTEGER_LITERAL:
t = jj_consume_token(INTEGER_LITERAL);
break;
case FLOATING_POINT_LITERAL:
t = jj_consume_token(FLOATING_POINT_LITERAL);
break;
default:
jj_la1[21] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
try {
value = jep.getNumberFactory().createNumber(t.image);
} catch (Exception e) {
value = null;
addToErrorList("Can't parse \"" + t.image + "\"");
}
{if (true) return value;}
throw new Error("Missing return statement in function");
}
final private boolean jj_2_1(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_1(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(0, xla); }
}
final private boolean jj_2_2(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_2(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(1, xla); }
}
final private boolean jj_2_3(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_3(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(2, xla); }
}
final private boolean jj_2_4(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_4(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(3, xla); }
}
final private boolean jj_2_5(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_5(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(4, xla); }
}
final private boolean jj_2_6(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_6(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(5, xla); }
}
final private boolean jj_2_7(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_7(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(6, xla); }
}
final private boolean jj_2_8(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_8(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(7, xla); }
}
final private boolean jj_2_9(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_9(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(8, xla); }
}
final private boolean jj_3R_26() {
if (jj_3R_10()) return true;
if (jj_scan_token(ASSIGN)) return true;
if (jj_3R_9()) return true;
return false;
}
final private boolean jj_3R_59() {
if (jj_scan_token(GE)) return true;
if (jj_3R_42()) return true;
return false;
}
final private boolean jj_3R_41() {
if (jj_3R_43()) return true;
return false;
}
final private boolean jj_3_6() {
if (jj_3R_17()) return true;
return false;
}
final private boolean jj_3_3() {
if (jj_3R_11()) return true;
return false;
}
final private boolean jj_3R_24() {
if (jj_3R_34()) return true;
return false;
}
final private boolean jj_3R_9() {
Token xsp;
xsp = jj_scanpos;
if (jj_3R_19()) {
jj_scanpos = xsp;
if (jj_3_3()) return true;
}
return false;
}
final private boolean jj_3R_19() {
if (jj_3R_26()) return true;
return false;
}
final private boolean jj_3R_58() {
if (jj_scan_token(LE)) return true;
if (jj_3R_42()) return true;
return false;
}
final private boolean jj_3R_50() {
if (jj_scan_token(NOT)) return true;
if (jj_3R_46()) return true;
return false;
}
final private boolean jj_3R_40() {
if (jj_scan_token(STRING_LITERAL)) return true;
return false;
}
final private boolean jj_3R_37() {
Token xsp;
xsp = jj_scanpos;
if (jj_3R_40()) {
jj_scanpos = xsp;
if (jj_3R_41()) return true;
}
return false;
}
final private boolean jj_3R_57() {
if (jj_scan_token(GT)) return true;
if (jj_3R_42()) return true;
return false;
}
final private boolean jj_3R_49() {
if (jj_scan_token(MINUS)) return true;
if (jj_3R_46()) return true;
return false;
}
final private boolean jj_3_8() {
if (jj_3R_18()) return true;
return false;
}
final private boolean jj_3R_21() {
if (jj_3R_24()) return true;
return false;
}
final private boolean jj_3R_48() {
if (jj_scan_token(PLUS)) return true;
if (jj_3R_46()) return true;
return false;
}
final private boolean jj_3R_46() {
Token xsp;
xsp = jj_scanpos;
if (jj_3R_48()) {
jj_scanpos = xsp;
if (jj_3R_49()) {
jj_scanpos = xsp;
if (jj_3R_50()) {
jj_scanpos = xsp;
if (jj_3_6()) return true;
}
}
}
return false;
}
final private boolean jj_3R_18() {
if (jj_3R_24()) return true;
if (jj_3R_25()) return true;
return false;
}
final private boolean jj_3R_56() {
if (jj_scan_token(LT)) return true;
if (jj_3R_42()) return true;
return false;
}
final private boolean jj_3R_52() {
Token xsp;
xsp = jj_scanpos;
if (jj_3R_56()) {
jj_scanpos = xsp;
if (jj_3R_57()) {
jj_scanpos = xsp;
if (jj_3R_58()) {
jj_scanpos = xsp;
if (jj_3R_59()) return true;
}
}
}
return false;
}
final private boolean jj_3R_35() {
if (jj_scan_token(COMMA)) return true;
if (jj_3R_9()) return true;
return false;
}
final private boolean jj_3R_34() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(12)) {
jj_scanpos = xsp;
if (jj_scan_token(15)) return true;
}
return false;
}
final private boolean jj_3R_39() {
if (jj_3R_42()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
if (jj_3R_52()) { jj_scanpos = xsp; break; }
}
return false;
}
final private boolean jj_3R_10() {
Token xsp;
xsp = jj_scanpos;
if (jj_3R_20()) {
jj_scanpos = xsp;
if (jj_3R_21()) return true;
}
return false;
}
final private boolean jj_3R_20() {
if (jj_3R_18()) return true;
return false;
}
final private boolean jj_3_1() {
if (jj_3R_9()) return true;
return false;
}
final private boolean jj_3R_16() {
if (jj_scan_token(MOD)) return true;
if (jj_3R_46()) return true;
return false;
}
final private boolean jj_3R_54() {
if (jj_scan_token(EQ)) return true;
if (jj_3R_39()) return true;
return false;
}
final private boolean jj_3R_15() {
if (jj_scan_token(DIV)) return true;
if (jj_3R_46()) return true;
return false;
}
final private boolean jj_3R_53() {
if (jj_scan_token(NE)) return true;
if (jj_3R_39()) return true;
return false;
}
final private boolean jj_3R_51() {
Token xsp;
xsp = jj_scanpos;
if (jj_3R_53()) {
jj_scanpos = xsp;
if (jj_3R_54()) return true;
}
return false;
}
final private boolean jj_3R_14() {
if (jj_scan_token(CROSS)) return true;
if (jj_3R_46()) return true;
return false;
}
final private boolean jj_3R_36() {
if (jj_3R_39()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
if (jj_3R_51()) { jj_scanpos = xsp; break; }
}
return false;
}
final private boolean jj_3R_64() {
if (jj_scan_token(COMMA)) return true;
if (jj_3R_9()) return true;
return false;
}
final private boolean jj_3R_25() {
if (jj_scan_token(LSQ)) return true;
if (jj_3R_9()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
if (jj_3R_35()) { jj_scanpos = xsp; break; }
}
if (jj_scan_token(RSQ)) return true;
return false;
}
final private boolean jj_3R_13() {
if (jj_scan_token(DOT)) return true;
if (jj_3R_46()) return true;
return false;
}
final private boolean jj_3R_33() {
if (jj_3R_25()) return true;
return false;
}
final private boolean jj_3R_12() {
if (jj_scan_token(MUL)) return true;
if (jj_3R_46()) return true;
return false;
}
final private boolean jj_3R_47() {
if (jj_scan_token(AND)) return true;
if (jj_3R_36()) return true;
return false;
}
final private boolean jj_3_9() {
if (jj_3R_9()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
if (jj_3R_64()) { jj_scanpos = xsp; break; }
}
return false;
}
final private boolean jj_3R_63() {
Token xsp;
xsp = jj_scanpos;
if (jj_3_9()) jj_scanpos = xsp;
return false;
}
final private boolean jj_3R_43() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(7)) {
jj_scanpos = xsp;
if (jj_scan_token(9)) return true;
}
return false;
}
final private boolean jj_3_7() {
if (jj_3R_18()) return true;
return false;
}
final private boolean jj_3R_32() {
if (jj_scan_token(LRND)) return true;
if (jj_3R_9()) return true;
if (jj_scan_token(RRND)) return true;
return false;
}
final private boolean jj_3R_27() {
if (jj_3R_36()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
if (jj_3R_47()) { jj_scanpos = xsp; break; }
}
return false;
}
final private boolean jj_3R_31() {
if (jj_3R_24()) return true;
return false;
}
final private boolean jj_3_4() {
Token xsp;
xsp = jj_scanpos;
if (jj_3_5()) {
jj_scanpos = xsp;
if (jj_3R_12()) {
jj_scanpos = xsp;
if (jj_3R_13()) {
jj_scanpos = xsp;
if (jj_3R_14()) {
jj_scanpos = xsp;
if (jj_3R_15()) {
jj_scanpos = xsp;
if (jj_3R_16()) return true;
}
}
}
}
}
return false;
}
final private boolean jj_3_5() {
if (jj_3R_17()) return true;
return false;
}
final private boolean jj_3R_30() {
if (jj_3R_38()) return true;
return false;
}
final private boolean jj_3R_29() {
if (jj_3R_18()) return true;
return false;
}
final private boolean jj_3R_44() {
if (jj_3R_46()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
if (jj_3_4()) { jj_scanpos = xsp; break; }
}
return false;
}
final private boolean jj_3R_23() {
Token xsp;
xsp = jj_scanpos;
if (jj_3R_28()) {
jj_scanpos = xsp;
if (jj_3R_29()) {
jj_scanpos = xsp;
lookingAhead = true;
jj_semLA = (getToken(1).kind == INDENTIFIER1 || getToken(1).kind == INDENTIFIER2) &&
jep.funTab.containsKey(getToken(1).image);
lookingAhead = false;
if (!jj_semLA || jj_3R_30()) {
jj_scanpos = xsp;
if (jj_3R_31()) {
jj_scanpos = xsp;
if (jj_3R_32()) {
jj_scanpos = xsp;
if (jj_3R_33()) return true;
}
}
}
}
}
return false;
}
final private boolean jj_3R_28() {
if (jj_3R_37()) return true;
return false;
}
final private boolean jj_3R_45() {
if (jj_scan_token(OR)) return true;
if (jj_3R_27()) return true;
return false;
}
final private boolean jj_3R_22() {
if (jj_3R_27()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
if (jj_3R_45()) { jj_scanpos = xsp; break; }
}
return false;
}
final private boolean jj_3R_61() {
if (jj_scan_token(MINUS)) return true;
if (jj_3R_44()) return true;
return false;
}
final private boolean jj_3R_38() {
if (jj_3R_34()) return true;
if (jj_scan_token(LRND)) return true;
if (jj_3R_63()) return true;
if (jj_scan_token(RRND)) return true;
return false;
}
final private boolean jj_3R_11() {
if (jj_3R_22()) return true;
return false;
}
final private boolean jj_3R_60() {
if (jj_scan_token(PLUS)) return true;
if (jj_3R_44()) return true;
return false;
}
final private boolean jj_3R_55() {
Token xsp;
xsp = jj_scanpos;
if (jj_3R_60()) {
jj_scanpos = xsp;
if (jj_3R_61()) return true;
}
return false;
}
final private boolean jj_3R_42() {
if (jj_3R_44()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
if (jj_3R_55()) { jj_scanpos = xsp; break; }
}
return false;
}
final private boolean jj_3R_62() {
if (jj_scan_token(POWER)) return true;
if (jj_3R_46()) return true;
return false;
}
final private boolean jj_3R_17() {
if (jj_3R_23()) return true;
Token xsp;
xsp = jj_scanpos;
if (jj_3R_62()) jj_scanpos = xsp;
return false;
}
final private boolean jj_3_2() {
if (jj_3R_10()) return true;
if (jj_scan_token(ASSIGN)) return true;
return false;
}
public ParserTokenManager token_source;
JavaCharStream jj_input_stream;
public Token token, jj_nt;
private int jj_ntk;
private Token jj_scanpos, jj_lastpos;
private int jj_la;
public boolean lookingAhead = false;
private boolean jj_semLA;
private int jj_gen;
final private int[] jj_la1 = new int[22];
static private int[] jj_la1_0;
static private int[] jj_la1_1;
static {
jj_la1_0();
jj_la1_1();
}
private static void jj_la1_0() {
jj_la1_0 = new int[] {0x80001,0x80001,0x80001,0x10000000,0x8000000,0x4800000,0x4800000,0x3600000,0x3600000,0x60000000,0x60000000,0x80000000,0x60000000,0x0,0xa80,0x9000,0x100000,0x9000,0x100000,0x9000,0xa80,0x280,};
}
private static void jj_la1_1() {
jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x27,0x8,0x10,0x0,0x140,0x0,0x0,0x0,0x0,0x0,0x0,};
}
final private JJCalls[] jj_2_rtns = new JJCalls[9];
private boolean jj_rescan = false;
private int jj_gc = 0;
public Parser(java.io.InputStream stream) {
jj_input_stream = new JavaCharStream(stream, 1, 1);
token_source = new ParserTokenManager(jj_input_stream);
token = new Token();
jj_ntk = -1;
jj_gen = 0;
for (int i = 0; i < 22; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
public void ReInit(java.io.InputStream stream) {
jj_input_stream.ReInit(stream, 1, 1);
token_source.ReInit(jj_input_stream);
token = new Token();
jj_ntk = -1;
jjtree.reset();
jj_gen = 0;
for (int i = 0; i < 22; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
public Parser(java.io.Reader stream) {
jj_input_stream = new JavaCharStream(stream, 1, 1);
token_source = new ParserTokenManager(jj_input_stream);
token = new Token();
jj_ntk = -1;
jj_gen = 0;
for (int i = 0; i < 22; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
public void ReInit(java.io.Reader stream) {
jj_input_stream.ReInit(stream, 1, 1);
token_source.ReInit(jj_input_stream);
token = new Token();
jj_ntk = -1;
jjtree.reset();
jj_gen = 0;
for (int i = 0; i < 22; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
public Parser(ParserTokenManager tm) {
token_source = tm;
token = new Token();
jj_ntk = -1;
jj_gen = 0;
for (int i = 0; i < 22; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
public void ReInit(ParserTokenManager tm) {
token_source = tm;
token = new Token();
jj_ntk = -1;
jjtree.reset();
jj_gen = 0;
for (int i = 0; i < 22; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
final private Token jj_consume_token(int kind) throws ParseException {
Token oldToken;
if ((oldToken = token).next != null) token = token.next;
else token = token.next = token_source.getNextToken();
jj_ntk = -1;
if (token.kind == kind) {
jj_gen++;
if (++jj_gc > 100) {
jj_gc = 0;
for (int i = 0; i < jj_2_rtns.length; i++) {
JJCalls c = jj_2_rtns[i];
while (c != null) {
if (c.gen < jj_gen) c.first = null;
c = c.next;
}
}
}
return token;
}
token = oldToken;
jj_kind = kind;
throw generateParseException();
}
static private final class LookaheadSuccess extends java.lang.Error { }
final private LookaheadSuccess jj_ls = new LookaheadSuccess();
final private boolean jj_scan_token(int kind) {
if (jj_scanpos == jj_lastpos) {
jj_la--;
if (jj_scanpos.next == null) {
jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
} else {
jj_lastpos = jj_scanpos = jj_scanpos.next;
}
} else {
jj_scanpos = jj_scanpos.next;
}
if (jj_rescan) {
int i = 0; Token tok = token;
while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
if (tok != null) jj_add_error_token(kind, i);
}
if (jj_scanpos.kind != kind) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
return false;
}
final public Token getNextToken() {
if (token.next != null) token = token.next;
else token = token.next = token_source.getNextToken();
jj_ntk = -1;
jj_gen++;
return token;
}
final public Token getToken(int index) {
Token t = lookingAhead ? jj_scanpos : token;
for (int i = 0; i < index; i++) {
if (t.next != null) t = t.next;
else t = t.next = token_source.getNextToken();
}
return t;
}
final private int jj_ntk() {
if ((jj_nt=token.next) == null)
return (jj_ntk = (token.next=token_source.getNextToken()).kind);
else
return (jj_ntk = jj_nt.kind);
}
private java.util.Vector jj_expentries = new java.util.Vector();
private int[] jj_expentry;
private int jj_kind = -1;
private int[] jj_lasttokens = new int[100];
private int jj_endpos;
private void jj_add_error_token(int kind, int pos) {
if (pos >= 100) return;
if (pos == jj_endpos + 1) {
jj_lasttokens[jj_endpos++] = kind;
} else if (jj_endpos != 0) {
jj_expentry = new int[jj_endpos];
for (int i = 0; i < jj_endpos; i++) {
jj_expentry[i] = jj_lasttokens[i];
}
boolean exists = false;
for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) {
int[] oldentry = (int[])(e.nextElement());
if (oldentry.length == jj_expentry.length) {
exists = true;
for (int i = 0; i < jj_expentry.length; i++) {
if (oldentry[i] != jj_expentry[i]) {
exists = false;
break;
}
}
if (exists) break;
}
}
if (!exists) jj_expentries.addElement(jj_expentry);
if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
}
}
public ParseException generateParseException() {
jj_expentries.removeAllElements();
boolean[] la1tokens = new boolean[43];
for (int i = 0; i < 43; i++) {
la1tokens[i] = false;
}
if (jj_kind >= 0) {
la1tokens[jj_kind] = true;
jj_kind = -1;
}
for (int i = 0; i < 22; i++) {
if (jj_la1[i] == jj_gen) {
for (int j = 0; j < 32; j++) {
if ((jj_la1_0[i] & (1< jj_gen) {
jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
switch (i) {
case 0: jj_3_1(); break;
case 1: jj_3_2(); break;
case 2: jj_3_3(); break;
case 3: jj_3_4(); break;
case 4: jj_3_5(); break;
case 5: jj_3_6(); break;
case 6: jj_3_7(); break;
case 7: jj_3_8(); break;
case 8: jj_3_9(); break;
}
}
p = p.next;
} while (p != null);
}
jj_rescan = false;
}
final private void jj_save(int index, int xla) {
JJCalls p = jj_2_rtns[index];
while (p.gen > jj_gen) {
if (p.next == null) { p = p.next = new JJCalls(); break; }
p = p.next;
}
p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
}
static final class JJCalls {
int gen;
Token first;
int arg;
JJCalls next;
}
}