/// <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; }
public void CompileTypeVerification(TypeVerification typeVerif) { MayBeParenthesize(typeVerif.Expression); textWriter.Write(" is {0}", SafeTypeName(typeVerif.TypeName)); }