private static SyntaxNode Program(RParser.ProgContext prog, Func<ParserRuleContext, Scope, SyntaxNode> transform, Scope scope) { var statements = new List<StatementSyntax>(); var inner = new Scope(scope); inner.InitR(); var pre = inner.PreStatements(); foreach (var expr in prog.expr_or_assign()) { pre.Clear(); var statement = transform(expr, inner) as StatementSyntax; Debug.Assert(statement != null); statements.AddRange(pre); statements.Add(statement); } return CSharp.Block(statements); }
private static SyntaxNode AssignmentStatement(RParser.AssignmentContext assignment, Func<ParserRuleContext, Scope, SyntaxNode> transform, Scope scope) { var left = transform(assignment.expr(), scope) as ExpressionSyntax; var right = transform(assignment.expr_or_assign(), scope) as ExpressionStatementSyntax; Debug.Assert(left != null && right != null); return assigmentStatement(left, right.Expression, scope); }