0

Mehrdeutige Grammatik:Mehrdeutigkeit aus Grammatik entfernen

E -> UV | EBE | V | [E]

V -> a | b

U -> < | >

B ->? | ! | @

Einige Informationen:

Rangfolge: <! < @, mit unären Operatoren (<,>) ist der höchste

Binäre Operatoren?,!, @ Sind rechts assoziativ.

Mein Versuch:

E -> UV | EBT | V | [E]

T -> E

V -> a | b

U -> < | >

B ->? | B1

B1 ->! | B2

B2 -> @

Ich bin mir nicht sicher, ob ich ein paar Sonderfälle während meiner Umwandlung weggelassen. Schätzen Sie, wenn Sie einige Fehler aufzeigen und Hinweise geben können.

Antwort

0

E -> UV | EBE | V | [E] V -> a | b U -> < | > B -> ? | ! | @

Rangfolge: <! < @, mit unären Operatoren (<,>) ist der höchste.

Binäre Operatoren?,!, @ Sind rechts assoziativ.

war ich über Ihre Rangordnung verwirrt, weil es impliziert ! ist eine höhere Priorität als >.

So vorausgesetzt, diese Rangordnung:

a,b,<,>,?,!,@

mag ich anmerken, dass die eindeutigen Grammatiken sind alle über Vermittler Zeichen verwenden, in der Regel mehr als die mehrdeutigen Grammatiken, um sicherzustellen, dass es ein Standardverfahren der Schritte um ein bestimmtes Terminal-Symbol zu erreichen, dh jeder String hat den gleichen Parse-Baum. Höchste Präzedenz bedeutet, dass es sich um die engste Konvertierung zur endgültigen Konvertierung von Nicht-Terminal zu Terminal-Symbol handelt.

Meine Antwort wäre:

E -> V?E | V!E | [email protected] | [E] //Right associativity = right recursive V-> <V | >V | E | T | a | b T-> a | b | E

jedoch sehr schwierig zu wissen, ohne Ihre Zielzeichenfolge zu kennen und akzeptiert/nicht akzeptiert.