Exemplo n.º 1
0
        private Expression T()
        {
            Expression  left = F();
            Expr_Binary eb   = T1(left);

            return(eb ?? left);
        }
Exemplo n.º 2
0
 private Expr_Binary T1(Expression left)
 {
     if (Match('*'))
     {
         Token t = Token;
         NextToken();
         Expr_Binary eb    = new Expr_Binary();
         Expression  right = F();
         eb.Operator = "*";
         eb.Left     = left;
         eb.Right    = right;
         Expr_Binary eb1 = T1(eb);
         return(eb1 ?? eb);
     }
     else if (Match('/'))
     {
         Token t = Token;
         NextToken();
         Expr_Binary eb    = new Expr_Binary();
         Expression  right = F();
         eb.Operator = "/";
         eb.Left     = left;
         eb.Right    = right;
         Expr_Binary eb1 = T1(eb);
         return(eb1 ?? eb);
     }
     return(null);
 }
Exemplo n.º 3
0
        private Expression W()
        {
            Expression  left = T();
            Expr_Binary eb   = W1(left);

            return(eb ?? left);
        }
Exemplo n.º 4
0
 private Expr_Binary W1(Expression left)
 {
     if (Match('|'))
     {
         Token t = Token;
         NextToken();
         Expr_Binary eb    = new Expr_Binary();
         Expression  right = T();
         eb.Operator = "|";
         eb.Left     = left;
         eb.Right    = right;
         Expr_Binary eb1 = W1(eb);
         return(eb1 ?? eb);
     }
     else if (Match('&'))
     {
         Token t = Token;
         NextToken();
         Expr_Binary eb    = new Expr_Binary();
         Expression  right = T();
         eb.Operator = "&";
         eb.Left     = left;
         eb.Right    = right;
         Expr_Binary eb1 = W1(eb);
         return(eb1 ?? eb);
     }
     return(null);
 }
Exemplo n.º 5
0
 private Expr_Binary R1(Expression left)
 {
     if (Match('+'))
     {
         Token t = Token;
         NextToken();
         Expr_Binary eb    = new Expr_Binary();
         Expression  right = W();
         eb.Operator = "+";
         eb.Left     = left;
         eb.Right    = right;
         Expr_Binary eb1 = R1(eb);
         return(eb1 ?? eb);
     }
     else if (Match('-'))
     {
         Token t = Token;
         NextToken();
         Expr_Binary eb    = new Expr_Binary();
         Expression  right = W();
         eb.Operator = "-";
         eb.Left     = left;
         eb.Right    = right;
         Expr_Binary eb1 = R1(eb);
         return(eb1 ?? eb);
     }
     return(null);
 }
Exemplo n.º 6
0
        private Expression D()
        {
            Expression  left = R();
            Expr_Binary eb   = D1(left);

            return(eb ?? left);
        }
Exemplo n.º 7
0
 private Expr_Binary E1(Expression left)
 {
     if (Match((int)TK_TYPE.TK_OP_L_AND))
     {
         Token t = Token;
         NextToken();
         Expr_Binary eb    = new Expr_Binary();
         Expression  right = D();
         eb.Operator = "&&";
         eb.Left     = left;
         eb.Right    = right;
         Expr_Binary eb1 = E1(eb);
         return(eb1 == null ? eb : eb1);
     }
     else if (Match((int)TK_TYPE.TK_OP_L_OR))
     {
         Token t = Token;
         NextToken();
         Expr_Binary eb    = new Expr_Binary();
         Expression  right = D();
         eb.Operator = "||";
         eb.Left     = left;
         eb.Right    = right;
         Expr_Binary eb1 = E1(eb);
         return(eb1 == null ? eb : eb1);
     }
     return(null);
 }
Exemplo n.º 8
0
        private Expression E()
        {
            Expression  left = D();
            Expr_Binary eb   = E1(left);

            return(eb == null ? left : eb);
        }
Exemplo n.º 9
0
 private Expression F()        //operand
 {
     if (Match('('))
     {
         NextToken();                //(
         Expression e = E();
         Accept(')');
         return(e);
     }
     else if (Match('-'))
     {
         NextToken();                //-
         Expression  e  = T();       //lowest
         Expr_Binary eb = new Expr_Binary();
         eb.Operator = "*";
         eb.Left     = e;
         Expr_Value ev = new Expr_Value();
         ev.Value = "-1";
         eb.Right = ev;
         return(eb);
     }
     else if (Match((int)TK_TYPE.TK_NUMBER))
     {
         Expr_Value ev = new Expr_Value();
         ev.Value = (string)Token.Obj;
         NextToken();
         return(ev);
     }
     else if (Match((int)TK_TYPE.TK_NAME))
     {
         object name = (string)Token.Obj;
         NextToken();                //name
         if (Match('('))
         {
             Expr_ValueList eas = new Expr_ValueList();
             eas.ValueList = new List <Expression>();
             return(CallFunction((string)name, GetActualArguments()));
         }
         else
         {
             Expr_Variable ev = new Expr_Variable();
             ev.Name = (string)name;
             return(ev);
         }
     }
     return(null);
 }
Exemplo n.º 10
0
 private Expr_Binary D1(Expression left)
 {
     if (Match((int)TK_TYPE.TK_OP_EQ))
     {
         Token t = Token;
         NextToken();
         Expr_Binary eb    = new Expr_Binary();
         Expression  right = R();
         eb.Operator = "==";
         eb.Left     = left;
         eb.Right    = right;
         Expr_Binary eb1 = D1(eb);
         return(eb1 ?? eb);
     }
     else if (Match((int)TK_TYPE.TK_OP_GE))
     {
         Token t = Token;
         NextToken();
         Expr_Binary eb    = new Expr_Binary();
         Expression  right = R();
         eb.Operator = ">=";
         eb.Left     = left;
         eb.Right    = right;
         Expr_Binary eb1 = D1(eb);
         return(eb1 ?? eb);
     }
     else if (Match((int)TK_TYPE.TK_OP_LE))
     {
         Token t = Token;
         NextToken();
         Expr_Binary eb    = new Expr_Binary();
         Expression  right = R();
         eb.Operator = "<=";
         eb.Left     = left;
         eb.Right    = right;
         Expr_Binary eb1 = D1(eb);
         return(eb1 ?? eb);
     }
     else if (Match('>'))
     {
         Token t = Token;
         NextToken();
         Expr_Binary eb    = new Expr_Binary();
         Expression  right = R();
         eb.Operator = ">";
         eb.Left     = left;
         eb.Right    = right;
         Expr_Binary eb1 = D1(eb);
         return(eb1 ?? eb);
     }
     else if (Match('<'))
     {
         Token t = Token;
         NextToken();
         Expr_Binary eb    = new Expr_Binary();
         Expression  right = R();
         eb.Operator = "<";
         eb.Left     = left;
         eb.Right    = right;
         Expr_Binary eb1 = D1(eb);
         return(eb1 ?? eb);
     }
     return(null);
 }