Пример #1
0
        public static IEnumerable <Log> Kill(string input)
        {
            var dot    = new DotTreeGenerator();
            var result = new List <Log>();

            Print(input);

            input = input.ToLowerInvariant().Trim();
            if (Cache.ContainsKey(input))
            {
                result = Cache[input].ToList();
            }
            else
            {
                var parser = ParseWithASTParser(input);
                var tree   = parser.evaluate().Tree;
                PrintString(dot.ToDot(tree));
                Parse(tree, result);
                Cache.Add(input, result);
            }

            TexasRanger.ValidateLogs(result);
            result.ForEach(x => Print(x.ToString()));

            foreach (var log in result)
            {
                log.OriginalInput = input;
                yield return(log.Return());
            }
        }
Пример #2
0
        private static void ParseLog(CommonTree tree, Log log)
        {
            if (tree.Type == PowerLogASTLexer.EXERCISE_NAME)
            {
                if (tree.ChildCount < 1)
                {
                    throw new Exception("Exercise is missing a name.");
                }
                else if (tree.Children.Any(x => x.Type == PowerLogASTLexer.WORD) == false)
                {
                    throw new Exception("Exercise is missing a name.");
                }

                log.Name = string.Join(" ", tree.Children.Select(x => x.Text));
                PrintString(log.Name);
            }
            else if (tree.Type == PowerLogASTLexer.FLAGGED_SET)
            {
                var set      = new Set();
                var childSet = (from s in tree.Children
                                where s.Type == PowerLogASTLexer.SET ||
                                s.Type == PowerLogASTLexer.MULTI_SET
                                select(CommonTree) s)
                               .FirstOrDefault();

                var childFlags = (from s in tree.Children
                                  where s.Type == PowerLogASTLexer.FLAGS
                                  select(CommonTree) s)
                                 .FirstOrDefault();

                if (childSet == null)
                {
                    throw new Exception(string.Format("No sets defined for [{0}]", log.Name));
                }

                ParseSet(childSet, set);
                ParseSetFlags(childFlags, set);
                TexasRanger.ValidateSet(set);
                log.Sets.Add(set);
            }

            ParseChildren(tree, log, ParseLog);
        }
Пример #3
0
        private static void Parse(CommonTree tree, ICollection <Log> list)
        {
            if (tree.Type == PowerLogASTLexer.EXERCISE)
            {
                if (tree.ChildCount > 0)
                {
                    var log = new Log();
                    foreach (var child in tree.Children)
                    {
                        ParseLog((CommonTree)child, log);
                    }

                    TexasRanger.ValidateLog(log);
                    list.Add(log);
                }
            }

            ParseChildren(tree, list, Parse);
        }