def grammar_words(self): """ Set of all words used in this grammar. :returns: set """ words = [] for rule in self._jsgf_grammar.rules: rule_literals = filter_expansion( rule.expansion, lambda x: isinstance(x, Literal) and x.text, shallow=True ) for literal in rule_literals: words.extend(literal.text.split()) # Return a set of words with no duplicates. return set(words)