Exemple #1
0
        /// <summary>
        /// Recognizes a relational expession.
        /// </summary>
        /// <returns>
        /// A <see cref="BinaryExpression"/> or a <see cref="TypeVerification"/>
        /// </returns>
        protected Expression Relation()
        {
            Expression expr = Term();

            if (expr == null)
            {
                return(null);
            }

            switch (token.TokenID)
            {
            case TokenID.DoubleEqual:
            case TokenID.ExclamationEqual:
            case TokenID.TripleEqual:
            case TokenID.ExclamationDoubleEqual:
            case TokenID.LessThan:
            case TokenID.LessThanEqual:
            case TokenID.GreaterThan:
            case TokenID.GreaterThanEqual:
            case TokenID.KW_StartsWith:
            case TokenID.KW_EndsWith:
            case TokenID.KW_Contains:
            case TokenID.KW_Matches:
                BinaryOperator oper = token.ToBinaryOperator();
                Consume(1);
                var term = Required <Expression>(Term, Resources.ExpressionRequired);
                expr = new BinaryExpression(oper, expr, term);
                break;

            case TokenID.KW_Is:
                Consume(1);

                string typeName;
                if (TryMatchAny(TokenID.TypeName, TokenID.Identifier))
                {
                    typeName = token.ToString();
                    Consume(1);
                }
                else
                {
                    throw new ParseException(FileName, token, Resources.TypeNameExpected);
                }

                Expression saved = expr;
                expr = new TypeVerification(saved, typeName);
                expr.SetLocation(saved.Start, token.End);
                break;
            }

            return(expr);
        }
        public void CompileTypeVerification(TypeVerification typeVerif)
        {
            XmlElement previousElement = currentElement;
            XmlElement tmpElement      = document.CreateElement("TypeVerification");

            tmpElement.SetAttribute("TypeName", typeVerif.TypeName);

            currentElement = document.CreateElement("Expression");
            typeVerif.Expression.AcceptCompiler(this);
            tmpElement.AppendChild(currentElement);

            previousElement.AppendChild(tmpElement);
            currentElement = previousElement;
        }
Exemple #3
0
 public void CompileTypeVerification(TypeVerification typeVerif)
 {
     MayBeParenthesize(typeVerif.Expression);
     textWriter.Write(" is {0}", SafeTypeName(typeVerif.TypeName));
 }