void Imperative_forloop(out ProtoCore.AST.ImperativeAST.ImperativeNode forloop) { ProtoCore.AST.ImperativeAST.ImperativeNode node; ProtoCore.AST.ImperativeAST.ForLoopNode loopNode = new ProtoCore.AST.ImperativeAST.ForLoopNode(); List<ProtoCore.AST.ImperativeAST.ImperativeNode> body = null; Expect(33); NodeUtils.SetNodeLocation(loopNode, t); loopNode.KwForLine = t.line; loopNode.KwForCol = t.col; Expect(12); int idLine = la.line; int idCol = la.col; Imperative_Ident(out node); loopNode.LoopVariable = node; loopNode.LoopVariable.line = idLine; loopNode.LoopVariable.col = idCol; Expect(65); loopNode.KwInLine = t.line; loopNode.KwInCol = t.col; int exprLine = la.line; int exprCol = la.col; Imperative_expr(out node); loopNode.Expression = node; if (loopNode.Expression != null) { loopNode.Expression.line = exprLine; loopNode.Expression.col = exprCol; } Expect(13); if (la.kind == 45) { Get(); Imperative_stmtlist(out body); loopNode.Body = body; Expect(46); NodeUtils.SetNodeEndLocation(loopNode, t); } else if (StartOf(21)) { ProtoCore.AST.ImperativeAST.ImperativeNode singleStmt = null; Imperative_stmt(out singleStmt); loopNode.Body.Add(singleStmt); } else SynErr(110); forloop = loopNode; }
void Imperative_forloop(out ProtoCore.AST.ImperativeAST.ImperativeNode forloop) { ProtoCore.AST.ImperativeAST.IfStmtNode dummyIfNode = new ProtoCore.AST.ImperativeAST.IfStmtNode(); ProtoCore.AST.ImperativeAST.ImperativeNode node; ProtoCore.AST.ImperativeAST.ForLoopNode loopNode = new ProtoCore.AST.ImperativeAST.ForLoopNode(); List<ProtoCore.AST.ImperativeAST.ImperativeNode> body = null; Expect(34); NodeUtils.SetNodeLocation(loopNode, t); loopNode.KwForLine = t.line; loopNode.KwForCol = t.col; Expect(10); int idLine = la.line; int idCol = la.col; Imperative_Ident(out node); loopNode.loopVar = node; loopNode.loopVar.line = idLine; loopNode.loopVar.col = idCol; Expect(68); loopNode.KwInLine = t.line; loopNode.KwInCol = t.col; int exprLine = la.line; int exprCol = la.col; Imperative_expr(out node); loopNode.expression = node; if (loopNode.expression != null) { loopNode.expression.line = exprLine; loopNode.expression.col = exprCol; } Expect(11); if (la.kind == 46) { Get(); Imperative_stmtlist(out body); loopNode.body = body; Expect(47); NodeUtils.SetNodeEndLocation(loopNode, t); } else if (StartOf(22)) { ProtoCore.AST.ImperativeAST.ImperativeNode singleStmt = null; Imperative_stmt(out singleStmt); loopNode.body.Add(singleStmt); } else SynErr(116); dummyIfNode.IfExprNode = new ProtoCore.AST.ImperativeAST.BooleanNode(true); dummyIfNode.IfBody.Add(loopNode); dummyIfNode.line = loopNode.line; dummyIfNode.col = loopNode.col; dummyIfNode.endLine = loopNode.endLine; dummyIfNode.endCol = loopNode.endCol; forloop = dummyIfNode; }