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);
                    }
                }
            }
        }
Пример #2
0
 public override Expression VisitBlock(BlockContext context)
 {
     using (_parserContext.PushScope())
     {
         return(Visit(context.statement_list()));
     }
 }
        public override void EnterRule_definition(Rule_definitionContext context)
        {
            var builder = new RuleBuilder();

            using (_parserContext.PushScope())
            {
                var expressionListener = new RuleParserListener(_parserContext, builder);
                var walker             = new ParseTreeWalker();
                walker.Walk(expressionListener, context);
            }

            var rule = builder.Build();

            _ruleSet.Add(Enumerable.Repeat(rule, 1));
        }