コード例 #1
0
        public static UnifiedExpression CreateJumpStatement(XElement node)
        {
            Contract.Requires(node != null);
            Contract.Requires(node.Name() == "jump_statement");

            /* jump_statement
             * : 'goto' IDENTIFIER ';'
             * | 'continue' ';'
             * | 'break' ';'
             * | 'return' ';'
             * | 'return' expression ';'
             */
            var firstElement = node.FirstElement();

            switch (firstElement.Value)
            {
            case "goto":
                return
                    (UnifiedGoto.Create(
                         UnifiedLabelIdentifier.Create(
                             node.NthElement(1).Value)));

            case "continue":
                return(UnifiedContinue.Create());

            case "break":
                return(UnifiedBreak.Create());

            case "return":
                var expression = node.Element("expression");
                if (expression != null)
                {
                    return
                        (UnifiedReturn.Create(
                             CreateExpression(expression).First()));
                }
                return(UnifiedReturn.Create());

            default:
                throw new InvalidOperationException();
            }
        }
コード例 #2
0
 public override bool Visit(
         UnifiedLabelIdentifier element, VisitorArgument arg)
 {
     Writer.Write(element.Name);
     return false;
 }
コード例 #3
0
 public static UnifiedLabelIdentifier CreateLabel(string name)
 {
     return(UnifiedLabelIdentifier.Create(name));
 }
コード例 #4
0
 public UnifiedElement VisitLabelStatement(
     LabelStatement label, object data)
 {
     return(UnifiedLabelIdentifier.Create(label.Label));
 }
コード例 #5
0
 public override bool Visit(
     UnifiedLabelIdentifier element, VisitorArgument arg)
 {
     Writer.Write(element.Name);
     return(false);
 }