Ejemplo n.º 1
0
        public override void EnterRuleFactMatch(RuleFactMatchContext context)
        {
            var patternTypeName = context.type().GetText();
            var patternType     = _parserContext.GetType(patternTypeName);

            var variableTypeName = context.local_variable_type().VAR() == null
                ? context.local_variable_type().type().GetText()
                : patternTypeName;

            var variableType = _parserContext.GetType(variableTypeName);

            var id = context.identifier().GetText();

            _parserContext.Scope.Declare(variableType, id);

            var patternBuilder = _groupBuilder.Pattern(patternType, id);

            if (context.expression_list() != null)
            {
                foreach (var expressionContext in context.expression_list().expression())
                {
                    using (_parserContext.PushScope())
                    {
                        var expressionParser = new ExpressionParser(_parserContext, patternType);
                        var expression       = (LambdaExpression)expressionParser.Visit(expressionContext);
                        patternBuilder.DslConditions(_groupBuilder.Declarations, expression);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public override Expression VisitUnary_expression(Unary_expressionContext context)
        {
            if (context.primary_expression() != null)
            {
                return(Visit(context.primary_expression()));
            }

            var expression = Visit(context.unary_expression());

            if (context.type() != null)
            {
                var type = _parserContext.GetType(context.type().GetText());
                return(Expression.Convert(expression, type));
            }

            var op = context.children[0].GetText();

            if (op == "!" || op == "~")
            {
                expression = Expression.Not(expression);
            }
            else if (op == "+")
            {
                //Keep the expression
            }
            else if (op == "-")
            {
                expression = Expression.Negate(expression);
            }
            else
            {
                throw new CompilationException($"Unsupported operation. Operation={op}", context);
            }
            return(expression);
        }
 public void TypeName(string typeName)
 {
     _type = _parserContext.GetType(typeName);
     _name = null;
 }