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