private static HashSet <string> CreateReservedWords() { var grammar = typeof(SQLiteParsingHelper).Assembly.GetResourceText("sql-sqlite-grammar.lisp", true); var tokens = TheLexer.Lexize(grammar); var reader = new TinyLispPseudoReader(); var form = reader.Read(tokens); var nodeFactory = new SQLiteNodeFactory(); var builder = new TreeBuilder(); var root = builder.Build(nodeFactory, form); var nodes = root.FetchTree(); var words = new List <string>(); words.AddRange(nodes .Where(x => x is ExactTextNode) .Cast <ExactTextNode>() .Select(x => x.ExactText.ToLowerInvariant())); words.AddRange(nodes .Where(x => x is MultiTextNode) .Cast <MultiTextNode>() .SelectMany(x => x.Texts.Select(y => y.ToLowerInvariant()))); return(new HashSet <string>(words)); }
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); }