home *** CD-ROM | disk | FTP | other *** search
- import java.io.PrintStream;
-
- public class JScriptExprParser extends JSbxBase {
- private JScriptParser aParser;
- private JScriptErrorLog aErrorLog;
- private JScriptExprNode aActNode;
- private static final int _EXPRESSION_NOT_FOUND = 0;
- private static final int _EXPRESSION_BREAK = 1;
- private static final int _EXPRESSION_CONTINUE = 2;
- private static final int _EXPRESSION_SPECIAL_TERM = 3;
-
- public JScriptExprParser() {
- this((JScriptParser)null, (JScriptErrorLog)null);
- }
-
- public JScriptExprParser(JScriptParser var1) {
- this(var1, (JScriptErrorLog)null);
- }
-
- public JScriptExprParser(JScriptParser var1, JScriptErrorLog var2) {
- this.Init();
- this.aParser = var1;
- this.aErrorLog = var2;
- }
-
- public boolean IsLastEmptyOrOperator() {
- return this.aActNode == null || this.aActNode instanceof JScriptExprOperator && !((JScriptExprOperator)this.aActNode).HasCorrectOperands();
- }
-
- public JScriptParserExpression ParseIt() throws JScriptExprParserException, JSbxExceptionBase {
- return this.ParseIt(false, false, false);
- }
-
- public JScriptParserExpression ParseIt(boolean var1) throws JScriptExprParserException, JSbxExceptionBase {
- return this.ParseIt(var1, false, false);
- }
-
- private JScriptParserExpression ParseIt(boolean var1, boolean var2) throws JScriptExprParserException, JSbxExceptionBase {
- return this.ParseIt(var1, var2, false);
- }
-
- private boolean LastTokenWasEOL() {
- JScriptToken var1 = this.aParser.GetLastTokenForExpParser();
- if (var1 != null && this.aActNode != null) {
- return var1.GetID() == 134;
- } else {
- return false;
- }
- }
-
- private JScriptParserExpression ParseIt(boolean var1, boolean var2, boolean var3) throws JScriptExprParserException, JSbxExceptionBase {
- JScriptExprNode var7 = this.aActNode;
- this.aActNode = null;
- JScriptTokenPosition var5 = new JScriptTokenPosition();
-
- JScriptToken var4;
- while((var4 = this.aParser.PeekToken(var5)) != null) {
- boolean var8 = this.LastTokenWasEOL();
- if (this.IsLastEmptyOrOperator()) {
- int var6 = this.CheckForTerm(var4, var5);
- if (var6 == 2) {
- continue;
- }
-
- if (var6 == 1) {
- break;
- }
-
- var6 = this.CheckForConst(var4, var5);
- if (var6 == 2) {
- continue;
- }
-
- if (var6 == 1) {
- break;
- }
- }
-
- int var10 = this.CheckForOperator(var4, var5, var1, var2, var3, var8);
- if (var10 == 3) {
- this.aActNode.SetRestTermExpr(new JScriptExprTerm("(special elem-term)", this.aParser.ParseTerm(true)));
- } else if (var10 != 2) {
- if (var10 != 1 && var2 && !this.IsLastEmptyOrOperator()) {
- this.HandleError(1022, var5);
- }
- break;
- }
- }
-
- if (this.aActNode instanceof JScriptExprOperator && !((JScriptExprOperator)this.aActNode).HasCorrectOperands()) {
- this.HandleError(1008, var5);
- this.aActNode = var7;
- return null;
- } else {
- JScriptExprNode var11 = this.GetExprTreeRoot();
- this.aActNode = var7;
- return var11;
- }
- }
-
- public void DumpAll(PrintStream var1, boolean var2) {
- var1.println("JScriptExprParser::DumpAll() --> ShowExprTree():");
- this.ShowExprTree(var1);
- }
-
- private void Init() {
- this.aActNode = null;
- this.aParser = null;
- this.aErrorLog = null;
- }
-
- private JScriptExprNode GetExprTreeRoot() {
- return this.aActNode != null ? this.aActNode.GetRoot() : null;
- }
-
- private void ShowExprTree(PrintStream var1) {
- var1.println();
- var1.println("SHOW EXPR. TREE:");
- var1.println("================");
- if (this.GetExprTreeRoot() != null) {
- this.GetExprTreeRoot().ShowTotalTree(var1);
- } else {
- var1.println("Expression-Tree is empty !");
- }
-
- var1.println();
- }
-
- private void HandleError(int var1, JScriptTokenPosition var2) throws JScriptExprParserException {
- JScriptExprParserException var3 = new JScriptExprParserException(var1, (String)null, var2);
- if (this.aErrorLog != null) {
- this.aErrorLog.AddError(var3);
- } else {
- throw var3;
- }
- }
-
- private JScriptExprNode RecursiveParseCall(boolean var1, boolean var2, boolean var3) throws JScriptExprParserException, JSbxExceptionBase {
- JScriptExprParser var4 = new JScriptExprParser(this.aParser, this.aErrorLog);
- JScriptExprNode var5 = (JScriptExprNode)var4.ParseIt(var1, var2, var3);
- Object var6 = null;
- return var5;
- }
-
- private void InsertRightNode(JScriptExprNode var1) throws JScriptExprParserException {
- this.aActNode.InsertRightExpr(var1);
- var1.InsertParent(this.aActNode);
- this.aActNode = var1;
- }
-
- private int InsertRightNode_Check(JScriptExprNode var1, int var2, JScriptTokenPosition var3) throws JScriptExprParserException {
- if (this.aActNode == null) {
- this.aActNode = var1;
- } else {
- if (!(this.aActNode instanceof JScriptExprOperator)) {
- this.HandleError(var2, var3);
- return 1;
- }
-
- this.InsertRightNode(var1);
- }
-
- return 2;
- }
-
- private void InsertLeftNode(JScriptExprNode var1) throws JScriptExprParserException {
- var1.InsertLeftExpr(this.aActNode);
- var1.InsertParent(this.aActNode.GetParent());
- if (this.aActNode.GetParent() instanceof JScriptExprOperator) {
- this.aActNode.GetParent().InsertRightExpr(var1);
- }
-
- this.aActNode.InsertParent(var1);
- this.aActNode = var1;
- }
-
- private int CheckForTerm(JScriptToken var1, JScriptTokenPosition var2) throws JSbxExceptionBase {
- JScriptParserTerm var4 = this.aParser.ParseTerm();
- if (var4 != null) {
- JScriptExprTerm var3 = new JScriptExprTerm(var1.GetString(), var4);
- int var5 = this.InsertRightNode_Check(var3, 1009, var2);
- return var5;
- } else {
- return 0;
- }
- }
-
- private int CheckForConst(JScriptToken var1, JScriptTokenPosition var2) throws JSbxExceptionBase {
- if (var1.GetType() == 3) {
- JScriptExprConst var4 = new JScriptExprConst(var1.GetString(), var1.GetValue());
- int var3 = this.InsertRightNode_Check(var4, 1009, var2);
- if (var3 == 2) {
- this.aParser.NextToken(var2);
- }
-
- return var3;
- } else {
- return 0;
- }
- }
-
- private int CheckForOperator(JScriptToken var1, JScriptTokenPosition var2, boolean var3, boolean var4, boolean var5, boolean var6) throws JSbxExceptionBase {
- short var7 = var1.GetID();
- if (var7 != 133 && var7 != 130) {
- if (var1.GetType() != 4) {
- return 0;
- } else if (var3 && var7 == 94) {
- return 1;
- } else if (!var4 && var7 == 88) {
- return 1;
- } else if (!var6 || var7 != 92 && var7 != 96) {
- var1 = this.aParser.NextToken(var2);
- if (var7 == 100) {
- if (!var5) {
- this.HandleError(1011, var2);
- }
-
- return 1;
- } else if (var7 == 88) {
- if (!var4) {
- this.HandleError(1006, var2);
- }
-
- return 1;
- } else if (var7 == 87) {
- JScriptExprSubExpr var11 = new JScriptExprSubExpr(this.RecursiveParseCall(false, true, false));
- return this.InsertRightNode_Check(var11, 1010, var2);
- } else {
- JScriptExprOperator var8 = new JScriptExprOperator(var1);
- if (this.aActNode == null) {
- if (!var8.IsValidUnaryPreOperator()) {
- this.HandleError(1013, var2);
- return 1;
- }
-
- var8.SetPrecedence(1);
- this.aActNode = var8;
- } else {
- if (this.aActNode instanceof JScriptExprOperator && !var8.IsValidUnaryPreOperator() && !((JScriptExprOperator)this.aActNode).IsValidUnaryPostOperator()) {
- this.HandleError(1003, var2);
- return 1;
- }
-
- if (this.aActNode instanceof JScriptExprOperator && !((JScriptExprOperator)this.aActNode).IsValidUnaryPostOperator() && var8.IsValidUnaryPreOperator()) {
- var8.SetPrecedence(1);
- this.InsertRightNode(var8);
- return 2;
- }
-
- while(this.aActNode.GetParent() != null && this.aActNode.GetParent() instanceof JScriptExprOperator && ((JScriptExprOperator)this.aActNode.GetParent()).HasEqualLowerPrecedenceThan(var8) && !((JScriptExprOperator)this.aActNode.GetParent()).IsConditionalOperator()) {
- this.aActNode = this.aActNode.GetParent();
- }
-
- this.InsertLeftNode(var8);
- if (var7 == 113) {
- JScriptExprNode var9 = this.RecursiveParseCall(false, false, true);
- var8.InsertOptExpr(var9);
- }
- }
-
- return 2;
- }
- } else {
- return 1;
- }
- } else {
- return 3;
- }
- }
-
- private boolean CheckForKeyword(JScriptToken var1, JScriptTokenPosition var2) {
- return var1.GetType() == 1;
- }
-
- private boolean CheckForSpecialChar(JScriptToken var1, JScriptTokenPosition var2) throws JScriptTokenizerException {
- if (var1.GetType() == 5) {
- if (var1.GetID() == 132) {
- return true;
- }
-
- var1 = this.aParser.NextToken(var2);
- if (var1.GetID() != 134) {
- this.HandleError(1005, var2);
- return true;
- }
- }
-
- return false;
- }
-
- private boolean CheckForDebug(JScriptToken var1, JScriptTokenPosition var2) throws JScriptTokenizerException {
- if (var1.GetType() == 6) {
- this.aParser.NextToken(var2);
- this.HandleError(1004, var2);
- return true;
- } else {
- return false;
- }
- }
- }
-