Ich habe diese Woche einen Test. Es gibt die folgende Grammatik für Boolesche Aussagen:Machen Sie eine kontextfreie Grammatik nicht mehrdeutig
B -> B and B | not B | (B) | id
B
ein nicht-Terminal ist und die Anschlüsse sind: and
, not
, (
, )
, id
Diese Grammatik mehrdeutig ist. Ich muss es neu schreiben und eine äquivalente Grammatik erstellen, die nicht mehrdeutig und ohne linke Rekursion ist, so dass not
in hoher Priorität, 'und' ist assoziativ nach links.
Ich habe versucht, es selbst zu tun:
B -> not B' | (B' | id B'
aber ich denke, das ist falsch, und ich bin wirklich für eine lange Zeit fest: mein Anfang.
Was genau meinen Sie mit "mehrdeutig"? Die anfängliche Grammatik erlaubt eine Auswahl der Substitution und Ihr Vorschlag erlaubt auch eine Substitution. Bitte klären Sie. – Codor
zweideutig bedeutet, dass es zwei syntaktische Strukturen für ein Wort in der Sprache gibt. Zum Beispiel das Wort: a und b und c, hat 2 Parsing Bäume – CnR
@Codor sieht mehrdeutig, weil 'nicht A und B' entweder' nicht (A und B) 'oder' (nicht A) und B', es gibt keine Vorrangregeln in der ursprünglichen Grammatik. –