public override void Visit(IfElseChainNode node) { Emit("if ("); Visit(node.IfNodes[0].Predicate); Emit(") {\n"); Visit(node.IfNodes[0].Body); Emit("} "); foreach (IfNode elseifNode in node.IfNodes.Skip(1)) { Emit("else if ("); Visit(elseifNode.Predicate); Emit(") {\n"); Visit(elseifNode.Body); Emit("} "); } if (node.ElseBody is not null) { Emit("else {\n"); Visit(node.ElseBody); Emit("}\n"); } else { Emit("\n"); } }
public override Node VisitIfStmt(ML4DParser.IfStmtContext context) { IfElseChainNode ifElseChainNode = new IfElseChainNode(); int predicates = context._pred.Count; int bodies = context._body.Count; ifElseChainNode.IfNodes.Add(new IfNode((ExpressionNode)Visit(context._pred[0]), (LinesNode)Visit(context._body[0]))); if (predicates == 1 && predicates < bodies) { ifElseChainNode.ElseBody = (LinesNode)Visit(context._body[bodies - 1]); } if (predicates > 1 && predicates == bodies) { for (int i = 1; i < bodies; i++) { ifElseChainNode.IfNodes.Add(new IfNode((ExpressionNode)Visit(context._pred[i]), (LinesNode)Visit(context._body[i]))); } } else if (predicates > 1 && predicates < bodies) { for (int i = 1; i < predicates; i++) { ifElseChainNode.IfNodes.Add(new IfNode((ExpressionNode)Visit(context._pred[i]), (LinesNode)Visit(context._body[i]))); } ifElseChainNode.ElseBody = (LinesNode)Visit(context._body[bodies - 1]); } return(ifElseChainNode); }
public override void Visit(IfElseChainNode node) { foreach (IfNode ifNode in node.IfNodes) { Visit(ifNode); } if (node.ElseBody is not null) { SymbolTable.OpenScope(); Visit(node.ElseBody); SymbolTable.CloseScope(); } }
public virtual void Visit(IfElseChainNode node) { VisitChildren(node); }