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); } } } }
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)); }