Ihr EBNF Original in <S>
nicht rekursiv ist, aber Ihre Studie BNF ist. Wenn Sie möchten, dass das BNF dieselbe Sprache generiert, sollten Sie das nicht tun. Außerdem kann Ihr EBNF epsilon
nicht erzeugen, also sollten Sie das auch nicht zu Ihrer <S>
-Produktion hinzufügen.
Wie die andere Antwort sagt, müssen Sie zusätzliches nicht-Terminals vorstellen:
<S> -> <plusminus> <optionalC> <repeatedA>
<plusminus> -> + | -
<optionalC> -> <C> | epsilon
<repeatedA> -> <A> <repeatedA> | epsilon
Dies ist eine einfache Übersetzung der EBNF-Elemente in Ihrer ursprünglichen Grammatik. Selbst wenn Sie zusätzliche Anforderungen haben (z. B. Epsilon-Eliminierung), sollten Sie mit dieser Art von Schritt beginnen.
Beachten Sie, dass die <S>
Regel nicht rekursiv ist. Auch wenn epsilon
für einige zusätzliche Nicht-Terminals verwendet wird, ist es nicht Teil der <S>
oder <plusminus>
Regeln, so dass, wie in der EBNF-Original, <S>
kann es nicht produzieren.
Ihre Frage ist unklar. * Was * kann (re?) * C * produzieren und warum ist das so schlimm? Es wäre wirklich hilfreich, wenn Sie die Phasen zeigen, in denen Sie die Antwort, die Sie erhalten haben, und die Begründung für jeden Schritt erstellt haben. –