public void PerformanceTestForTinyLispLexer()
        {
            ILexer tinyLispLexer = new TinyLispLexer();
            var    grammar       = this.GetType().Assembly.GetResourceText("sql-grammar.lisp", true);

            var start = DateTime.UtcNow;

            //var num = 10 * 1000;
            var num = 10 * 1000;

            for (var i = 0; i < num; i++)
            {
                tinyLispLexer.Lexize(grammar);
            }

            var end     = DateTime.UtcNow;
            var seconds = (end - start).TotalSeconds;

            var perSecond = num / seconds;
            var msPerCall = seconds / num * 1000;

            Assert.Pass($"Per second: {perSecond}; ms per call: {msPerCall}");

            //var k = 3;
        }
        public CliExecutorDescriptorBuilder(string executorGrammar)
        {
            ILexer lexer  = new TinyLispLexer();
            var    tokens = lexer.Lexize(executorGrammar);
            ITinyLispPseudoReader reader = new TinyLispPseudoReader();

            _form = reader.Read(tokens);
        }
示例#3
0
        private INode BuildRoot()
        {
            var    nodeFactory = new SQLiteNodeFactory();
            var    input       = this.GetType().Assembly.GetResourceText("sql-sqlite-grammar.lisp", true);
            ILexer lexer       = new TinyLispLexer();
            var    tokens      = lexer.Lexize(input);

            var reader = new TinyLispPseudoReader();
            var list   = reader.Read(tokens);

            ITreeBuilder builder = new TreeBuilder();
            var          root    = builder.Build(nodeFactory, list);

            this.ChargeRoot(root);

            return(root);
        }
示例#4
0
        protected CliExecutorBase(
            string grammar,
            string version,
            bool supportsHelp)
            : base(ExtractName(grammar), version, supportsHelp)
        {
            var tinyLispLexer        = new TinyLispLexer();
            var tinyLispPseudoReader = new TinyLispPseudoReader();
            var lispTokens           = tinyLispLexer.Lexize(grammar);

            _form = tinyLispPseudoReader.Read(lispTokens);

            this.Descriptor = (new CliExecutorDescriptorBuilder(grammar)).Build();

            if (this.Name == null)
            {
                if (this.Version != null)
                {
                    throw new ArgumentException("Nameless executor cannot support version.", nameof(version));
                }

                if (this.SupportsHelp)
                {
                    throw new ArgumentException("Nameless executor cannot support help.", nameof(supportsHelp));
                }
            }

            try
            {
                var helper = new CliExecutorDescriptorBuilder(grammar);
                this.Descriptor = helper.Build();
            }
            catch (CliException)
            {
                // couldn't build descriptor
            }
        }