public UnifiedElement VisitDoWhileStatement( DoWhileStatement stmt, object data) { var body = stmt.EmbeddedStatement.TryAcceptForExpression(this).ToBlock( ); var cond = stmt.Condition.TryAcceptForExpression(this); return(UnifiedDoWhile.Create(cond, body)); }
public static UnifiedExpression CreateIterationStatement(XElement node) { Contract.Requires(node != null); Contract.Requires(node.Name() == "iteration_statement"); /* * iteration_statement * : 'while' '(' expression ')' statement | 'do' statement 'while' '(' expression ')' ';' | 'for' '(' expression_statement expression_statement expression? ')' statement */ var first = node.FirstElement().Value; var body = UnifiedBlock.Create( CreateStatement(node.FirstElement("statement"))); switch (first) { case "while": return (UnifiedWhile.Create( CreateExpression(node.NthElement(2)).First(), body)); case "do": return (UnifiedDoWhile.Create( CreateExpression(node.NthElement(4)).First(), body)); case "for": var step = node.Element("expression") != null? CreateExpression ( node . FirstElement ( "expression")) . First () : null; return(UnifiedFor.Create( CreateExpressionStatement(node.NthElement(2)), CreateExpressionStatement(node.NthElement(3)), step, body)); default: throw new InvalidOperationException(); } }
private static UnifiedExpression CreateWhile(XElement node) { Contract.Requires(node != null); Contract.Requires(node.Name() == "while"); var cond = CreateExpresion(node.FirstElement()); var secondNode = node.NthElement(1); if (node.LastElement().Name() == "TrueClass") { return(UnifiedWhile.Create(cond, CreateSmartBlock(secondNode))); } return(UnifiedDoWhile.Create(cond, CreateSmartBlock(secondNode))); }
public static UnifiedExpression CreateUntil(XElement node) { Contract.Requires(node != null); Contract.Requires(node.Name() == "until"); var cond = UnifiedUnaryExpression.Create( CreateExpresion(node.FirstElement()), UnifiedUnaryOperator.Create( "!", UnifiedUnaryOperatorKind.Not)); var secondNode = node.NthElement(1); if (node.LastElement().Name() == "TrueClass") { return(UnifiedWhile.Create(cond, CreateSmartBlock(secondNode))); } return(UnifiedDoWhile.Create(cond, CreateSmartBlock(secondNode))); }