コード例 #1
0
 public override void Visit(IfElseIfElseNode node)
 {
     _symbolTable.SetCurrentNode(node);
     // If conditions
     node.IfCondition.Accept(this);
     // If codeblock
     _symbolTable.OpenScope(BlockType.IfStatement);
     foreach (var item in node.IfCodeBlock.Children)
     {
         item.Accept(this);
     }
     _symbolTable.CloseScope();
     // Elseif statements
     foreach (var item in node.ElseIfList)
     {
         item.Item1.Accept(this);
         _symbolTable.OpenScope(BlockType.ElseifStatement);
         foreach (var child in item.Item2.Children)
         {
             child.Accept(this);
         }
         _symbolTable.CloseScope();
     }
     // Else statement
     _symbolTable.OpenScope(BlockType.ElseStatement);
     if (node.ElseCodeBlock != null)
     {
         foreach (var child in node.ElseCodeBlock.Children)
         {
             child.Accept(this);
         }
     }
     _symbolTable.CloseScope();
 }
コード例 #2
0
        public override AbstractNode VisitIfElseIfElse([NotNull] GiraphParser.IfElseIfElseContext context)
        {
            IfElseIfElseNode IfNode = new IfElseIfElseNode(context.Start.Line, context.Start.Column);

            IfNode.IfCondition = Visit(context.boolCompOrExp()) as BoolComparisonNode;
            IfNode.IfCodeBlock = Visit(context.codeBlock()) as CodeBlockNode;
            if (context.elseifCond() != null)
            {
                // Loop though all the ElseIf(s)
                foreach (var ElseIf in context.elseifCond())
                {
                    // Add their conditions and codeblocks
                    IfNode.ElseIfList.Add(Tuple.Create((Visit(ElseIf.boolCompOrExp()) as BoolComparisonNode), (Visit(ElseIf.codeBlock()) as CodeBlockNode)));
                }
            }

            // Else codeblock, First codeblock element, then it adopts the rest, if there are any
            if (context.elseCond() != null)
            {
                // There will never be more then one Else block, and it does not have a boolcomparison
                if (context.elseCond().codeBlock().ChildCount > 0)
                {
                    IfNode.ElseCodeBlock = Visit(context.elseCond().codeBlock()) as CodeBlockNode;
                }
            }
            return(IfNode);
        }
コード例 #3
0
        public override void Visit(IfElseIfElseNode node)
        {
            SymbolTable.SetCurrentNode(node);
            // If statements
            Visit(node.IfCondition);
            VisitChildrenNewScope(node.IfCodeBlock, BlockType.IfStatement);

            foreach (var ElseIf in node.ElseIfList)
            {
                VisitChildren(ElseIf.Item1);
                VisitChildrenNewScope(ElseIf.Item2, BlockType.ElseifStatement);
            }

            VisitChildrenNewScope(node.ElseCodeBlock, BlockType.ElseStatement);
        }
コード例 #4
0
 public override void Visit(IfElseIfElseNode node)
 {
     Debug.Print("IfElseIfElseNode");
     ProgramCode.Append("IF (");
     node.IfCondition.Accept(this);
     ProgramCode.Append(")\n{\n");
     node.IfCodeBlock.Accept(this);
     ProgramCode.Append("}\n");
     for (int i = 0; i < node.ElseIfList.Count; i++)
     {
         ProgramCode.Append("ELSEIF (");
         node.ElseIfList[i].Item1.Accept(this);
         ProgramCode.Append(")\n{\n");
         node.ElseIfList[i].Item2.Accept(this);
         ProgramCode.Append("}\n");
     }
     if (node.ElseCodeBlock != null)
     {
         ProgramCode.Append("ELSE\n{\n");
         node.ElseCodeBlock.Accept(this);
         ProgramCode.Append("}\n");
     }
 }
コード例 #5
0
 public abstract void Visit(IfElseIfElseNode node);