예제 #1
0
파일: Extension.cs 프로젝트: mpmedia/Excess
        private static SyntaxNode UnaryOperator(RParser.ExprContext expr, Func<ParserRuleContext, Scope, SyntaxNode> transform, Scope scope)
        {
            Debug.Assert(expr.children.Count == 2);
            var op = expr.children[0].GetText();

            var value = transform(expr.GetRuleContext<RParser.ExprContext>(0), scope) as ExpressionSyntax;
            if (isConstant(value))
                return CSharp.ParseExpression(op + value.ToString());

            Debug.Assert(value != null);

            return unaryOperatorCall.Get(_unaryOperators[op], value);
        }
예제 #2
0
파일: Extension.cs 프로젝트: mpmedia/Excess
        private static SyntaxNode BinaryOperator(RParser.ExprContext expr, Func<ParserRuleContext, Scope, SyntaxNode> transform, Scope scope)
        {
            var left = transform(expr.GetRuleContext<RParser.ExprContext>(0), scope) as ExpressionSyntax;
            var right = transform(expr.GetRuleContext<RParser.ExprContext>(1), scope) as ExpressionSyntax;
            Debug.Assert(left != null && right != null);

            Debug.Assert(expr.children.Count == 3);
            var op = expr.children[1].GetText();

            return binaryOperatorCall.Get(_binaryOperators[op], left, right);
        }