示例#1
0
        public override List <GeneralError> VisitRule([NotNull] WordLangParser.RuleContext context)
        {
            var errs = new List <GeneralError>();



            var conditions = context.conditions();

            if (conditions.ChildCount == 0)
            {
                errs.Add(context.NewError("Missing the Conditions header"));
            }
            else
            {
                errs.AddRange(Visit(conditions));
            }

            var outcomes = context.outcomes();

            if (outcomes.ChildCount == 0)
            {
                errs.Add(context.NewError("Missing the Outcomes header"));
            }
            else
            {
                errs.AddRange(Visit(outcomes));
            }

            return(errs);
        }
示例#2
0
        public override string VisitRule([NotNull] WordLangParser.RuleContext context)
        {
            var title      = Visit(context.ruleTitle());
            var displayAs  = Visit(context.displayAs());
            var conditions = Visit(context.conditions());
            var dialogs    = Visit(context.dialogs());
            var outcomes   = Visit(context.outcomes());

            return($"{{\"name\":{title},\"displayAs\":{displayAs},\"conditions\":{conditions},\"dialog\":{dialogs},\"outcomes\":{outcomes}}}");
        }
示例#3
0
        public override string VisitRule([NotNull] WordLangParser.RuleContext context)
        {
            var title      = Visit(context.ruleTitle());
            var displayAs  = Visit(context.displayAs());
            var conditions = Visit(context.conditions());
            var dialogs    = Visit(context.dialogs());
            var outcomes   = Visit(context.outcomes());

            return($"(rule title=[{title}] displayAs=[{displayAs}] conditions=[{conditions}] dialogs=[{dialogs}] outcomes=[{outcomes}])");
        }
示例#4
0
        public override AST.RuleTree VisitRule([NotNull] WordLangParser.RuleContext context)
        {
            var rule = new AST.Rule();

            var titleContext = context.ruleTitle();

            rule.Title = new AST.FieldString()
            {
                Value      = titleContext.text().NAME().CombineTokens(),
                StartIndex = titleContext.text().NAME().First().Symbol.StartIndex,
                StopIndex  = titleContext.text().NAME().Last().Symbol.StopIndex
            };

            var displayAsCtx = context.displayAs().text();

            if (displayAsCtx != null)
            {
                rule.DisplayAs = new AST.FieldString()
                {
                    Value      = displayAsCtx.NAME().CombineTokens(),
                    StartIndex = displayAsCtx.Start.StartIndex,
                    StopIndex  = displayAsCtx.Stop.StopIndex
                };
            }
            else
            {
                rule.DisplayAs = new AST.FieldString()
                {
                    Value      = "",
                    StartIndex = context.displayAs().Start.StartIndex,
                    StopIndex  = context.displayAs().Stop.StopIndex
                };
            }

            rule.Conditions = context.conditions().booleanExpr()
                              .Select(ctx => Visit(ctx))
                              .OfType <AST.Condition>()
                              .ToList();

            rule.Dialogs = context.dialogs().dialogLine()
                           .Select(ctx => Visit(ctx))
                           .OfType <AST.Dialog>()
                           .ToList();

            rule.Outcomes = context.outcomes().singleOutcome()
                            .Select(ctx => Visit(ctx))
                            .OfType <AST.Outcome>()
                            .ToList();

            return(rule);
        }