'Return a feature structure based ``FeatureGrammar``.
:param input: a grammar, either in the form of a string or else
as a list of strings.
:param features: a tuple of features (default: SLASH, TYPE)
:param logic_parser: a parser for lambda-expressions,
by default, ``LogicParser()``
:param fstruct_reader: a feature structure parser
(only if features and logic_parser is None)'

@classmethod
def fromstring(cls, input, features=None, logic_parser=None, fstruct_reader=None, encoding=None):

    if (features is None):
        features = (SLASH, TYPE)
    if (fstruct_reader is None):
        fstruct_reader = FeatStructReader(features, FeatStructNonterminal, logic_parser=logic_parser)
    elif (logic_parser is not None):
        raise Exception(u"'logic_parser'    and    'fstruct_reader'    must    not    both    be    set")
    (start, productions) = read_grammar(input, fstruct_reader.read_partial, encoding=encoding)
    return FeatureGrammar(start, productions)
