예제 #1
0
파일: Extension.cs 프로젝트: mpmedia/Excess
        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);
        }
예제 #2
0
파일: Extension.cs 프로젝트: mpmedia/Excess
        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);
        }