Exemplo n.º 1
0
		private Expression ParseBitwiseORExpression (bool noIn)
		{
			Token start = current;
			Expression expr = ParseBitwiseXORExpression (noIn);
			while (current.Kind == Token.Type.Bar) {
				Token op = current;
				Next ();
				Expression right = ParseBitwiseXORExpression (noIn);
				expr = new BinaryOperatorExpression (expr, right, Expression.Operation.Bar, new TextSpan (start, current), new TextPoint (op.StartPosition));
			}
			return expr;				
		}
Exemplo n.º 2
0
		private Expression ParseEqualityExpression (bool noIn)
		{
			Token start = current;
			Expression expr = ParseRelationalExpression (noIn);
			while (current.Kind == Token.Type.EqualEqual
				|| current.Kind == Token.Type.BangEqual
				|| current.Kind == Token.Type.EqualEqualEqual
				|| current.Kind == Token.Type.BangEqualEqual) {
				Expression.Operation op = Expression.Operation.SyntaxError;
				switch (current.Kind) {
					case Token.Type.EqualEqual:
						op = Expression.Operation.EqualEqual;
						break;
					case Token.Type.BangEqual:
						op = Expression.Operation.BangEqual;
						break;
					case Token.Type.EqualEqualEqual:
						op = Expression.Operation.EqualEqualEqual;
						break;
					case Token.Type.BangEqualEqual:
						op = Expression.Operation.BangEqualEqual;
						break;
				}
				Token ope = current;
				Next ();
				Expression right = ParseRelationalExpression (noIn);
				expr = new BinaryOperatorExpression (expr, right, op, new TextSpan (start, current), new TextPoint (ope.StartPosition));
			}
			return expr;
		}
Exemplo n.º 3
0
		private Expression ParseRelationalExpression (bool noIn)
		{
			Token start = current;
			Expression.Operation op = Expression.Operation.SyntaxError;
			Expression expr = ParseShiftExpression (noIn);
			while (current.Kind == Token.Type.Less
				|| current.Kind == Token.Type.Greater
				|| current.Kind == Token.Type.GreaterEqual
				|| current.Kind == Token.Type.LessEqual
				|| current.Kind == Token.Type.instanceof
				|| (current.Kind == Token.Type.@in && !noIn)) {
				switch (current.Kind) {
					case Token.Type.Less:
						op = Expression.Operation.Less;
						break;
					case Token.Type.Greater:
						op = Expression.Operation.Greater;
						break;
					case Token.Type.GreaterEqual:
						op = Expression.Operation.GreaterEqual;
						break;
					case Token.Type.LessEqual:
						op = Expression.Operation.LessEqual;
						break;
					case Token.Type.instanceof:
						op = Expression.Operation.instanceof;
						break;
					case Token.Type.@in:
						if (noIn)
							return ParseShiftExpression (noIn);
						else
							op = Expression.Operation.@in;
						break;
				}
				Next ();
				Expression right = ParseShiftExpression (noIn);
				expr = new BinaryOperatorExpression (expr, right, op, new TextSpan (start, current), new TextPoint (start.StartPosition));
			}
			return expr;
		}
Exemplo n.º 4
0
		private Expression ParseShiftExpression (bool noIn)
		{
			Token start = current;
			Expression.Operation op = Expression.Operation.SyntaxError;
			Expression expr = ParseAdditiveExpression (noIn);
			while (current.Kind == Token.Type.LessLess
				|| current.Kind == Token.Type.GreaterGreater
				|| current.Kind == Token.Type.GreaterGreaterGreater) {
				switch (current.Kind) {
					case Token.Type.LessLess:
						op = Expression.Operation.LessLess;
						break;
					case Token.Type.GreaterGreater:
						op = Expression.Operation.GreaterGreater;
						break;
					case Token.Type.GreaterGreaterGreater:
						op = Expression.Operation.GreaterGreaterGreater;
						break;
				}
				Next ();
				Expression right = ParseAdditiveExpression (noIn);
				expr = new BinaryOperatorExpression (expr, right, op, new TextSpan (start, current), new TextPoint (start.StartPosition));
			}
			return expr;
		}
Exemplo n.º 5
0
		private Expression ParseAdditiveExpression (bool noIn)
		{
			Token start = current;
			Expression expr = ParseMultiplicativeExpression (noIn);
			while (current.Kind == Token.Type.Plus
				|| current.Kind == Token.Type.Minus) {
				Expression.Operation op = Expression.Operation.SyntaxError;
				switch (current.Kind) {
					case Token.Type.Plus:
						op = Expression.Operation.Plus;
						break;
					case Token.Type.Minus:
						op = Expression.Operation.Minus;
						break;
				}
				Next ();
				Expression right = ParseMultiplicativeExpression (noIn);
				expr = new BinaryOperatorExpression (expr, right, op, new TextSpan (start, current), new TextPoint (start.StartPosition));
			}
			return expr;
		}
Exemplo n.º 6
0
		private Expression ParseExpression (bool noIn)
		{
			Token start = current;
			Expression expr = ParseAssignmentExpression (noIn);
			while (current.Kind == Token.Type.Comma) {
				Next ();
				Expression right = ParseAssignmentExpression (noIn);
				expr = new BinaryOperatorExpression (expr, right, Expression.Operation.Comma, new TextSpan (start, current), new TextPoint (start.StartPosition));
			}
			return expr;
		}