Ejemplo n.º 1
0
        internal static WordsData getInstance <T>(string name, Scanner wscanner, string[] names, bool cs,
                                                  FromRange <string, T> for_unknown)
        {
            Keywords.StringCase          scase        = getStringCase(cs);
            string[]                     unique_names = Misc.Dedup(names, scase.Comparator);
            System.Collections.Hashtable map          = new System.Collections.Hashtable();
            foreach (string n in unique_names)
            {
                object tok = Tokens.CreateReservedWordToken(n);
                map[scase.ToKey(n)] = tok;
            }
            Map <string, object> fmap = scase.ToMap(map);

            Tokenizer tn = delegate(string src, int from, int len)
            {
                string text = src.Substring(from, len);
                object r    = fmap(text);
                if (r != null)
                {
                    return(r);
                }
                else
                {
                    return(for_unknown(from, len, src));
                }
            };
            Lexer lx = Lexers.Lex(wscanner, tn);

            return(new WordsData(fmap, new Lexer[] { lx }));
        }
Ejemplo n.º 2
0
        internal static WordsData instance(string[] names)
        {
            Hashtable operators = new Hashtable();

            string[] ops = sort(names);
            Lexer[]  lxs = new Lexer[ops.Length];
            for (int i = 0; i < ops.Length; i++)
            {
                string  s       = ops[i];
                Scanner scanner = s.Length == 1 ? Scanners.IsChar(s[0]) : Scanners.IsString(s);
                object  tok     = Tokens.CreateReservedWordToken(s);
                operators[s] = tok;
                Lexer lx = Lexers.Lex(scanner, Tokenizers.ForValue(tok));
                lxs[i] = lx;
            }
            return(new WordsData(Functors.AsMap <string, object>(operators), lxs));
        }