/** Builds a new {@link Terminals} instance that recognizes words defined in this builder. */ public Terminals build() { return new Terminals( union(Keywords.lexicon(wordScanner, keywords, stringCase, wordTokenMap))); } }
static Lexicon lexicon( Parser<String> wordScanner, Collection<String> keywordNames, StringCase stringCase, final Function<String, ?> defaultMap) { HashMap<String, Object> map = new HashMap<String, Object>(); for (String n : unique(stringCase, keywordNames.toArray(new String[keywordNames.size()]))) { Object value = Tokens.reserved(n); map.put(stringCase.toKey(n), value); } Function<String, Object> keywordMap = stringCase.byKey(map::get); return new Lexicon(keywordMap, wordScanner.map(Lexicon.fallback(keywordMap, defaultMap))); } }