private Expression T() { Expression left = F(); Expr_Binary eb = T1(left); return(eb ?? left); }
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); }
private Expression W() { Expression left = T(); Expr_Binary eb = W1(left); return(eb ?? left); }
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); }
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); }
private Expression D() { Expression left = R(); Expr_Binary eb = D1(left); return(eb ?? left); }
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); }
private Expression E() { Expression left = D(); Expr_Binary eb = E1(left); return(eb == null ? left : eb); }
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); }
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); }