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(); }
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); }
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); }
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"); } }
public abstract void Visit(IfElseIfElseNode node);