Hat jemand die von MKS YACC bereitgestellten „Auswahlpräferenzen“ verwendet?

StackOverflow https://stackoverflow.com/questions/478891

  •  20-08-2019
  •  | 
  •  

Frage

Da ich überhaupt keine Antwort auf meine Frage bekommen habe Gibt es eine Alternative zu MKS YACC, die die Selektionspräferenzsyntax oder etwas sehr Ähnliches unterstützt?, Ich werde die grundlegendere Frage stellen:

  • Hat jemand die von MKS YACC bereitgestellten "Auswahlpräferenzen" verwendet?

Wenn Sie haben, wofür haben Sie es verwendet? Ist es auch sinnvoll, es in etwas anderem als in der letzten Position in einer Regel zu verwenden?

Ich muss mich um eine Grammatik kümmern, die Regeln wie:

    TOKEN1 LPAREN non_terminal1 [^EQUAL] TOKEN2 non_terminal2 RPAREN

Wenn ich etwas nicht missverstanden, liefert die Eingeweihungsauswahlpräferenz in diesem Zusammenhang keinen Wert.

Hintergrund

MKS YACC unterstützt eine Notation, die ihre Website aufruft. "Auswahlpräferenzsyntax". Es ist nicht dargestellt, aber es besteht aus einem Token oder einer Liste von Token in quadratischen Klammern mit einer Pflege (die optional sein könnte), und es zeigt an, dass das jeweilige Token diesem Konstrukt nicht folgen darf, sondern dass Token nicht gezählt wird als Teil dieser Regel:

non_terminal1:  TOKEN1 non_terminal2 TOKEN2 [^TOKEN3]

Diese Regeln besagen also, dass a TOKEN1 gefolgt von einem non_terminal2 und ein TOKEN2 ist ein non_terminal1, es sei denn, das nächste Token ist a TOKEN3 In diesem Fall gilt eine andere Regel.

(Ich bin mir nicht klar Klar, ob die Pflege erforderlich ist, alle Beispiele, die ich gesehen habe, benutzte die Pflege.)

War es hilfreich?

Lösung

Jonathan. Um 1:30 Uhr bin ich nicht bereit, dies selbst zu tun, aber was auch immer diese Regeln tun, sie können nur für Regeln, die in so etwas wie normaler BNF geschrieben werden könnten, eine Kurzschrift sein. Wenn man sich dies ansieht, scheint es, dass die "Auswahlpräferenz" es Ihnen ermöglicht, auszudrücken, was ansonsten mehrere Produktionen mit einer Grammatikregel wäre.

Ich habe ein wenig gegraben und gefunden Dies, was meine Vermutung bestätigt: Was die Auswahlpräferenz tut, können Sie ausdrücklich eine Lookahead einfügen, so dass Regeln, die sonst in Konflikt sind, austauschend werden können.

Was ich vorschlagen würde, ist, darüber nachzudenken, wie eine dieser Regeln aussehen würde, wenn sie in YACC oder Straight BNF neu geschrieben wird. Ich vermute, es wird so etwas wie

TOKEN1 LPAREN non_terminal1 MULT TOKEN2 non_terminal2 RPAREN
TOKEN1 LPAREN non_terminal1 DIVIDE TOKEN2 non_terminal2 RPAREN
TOKEN1 LPAREN non_terminal1 ADD TOKEN2 non_terminal2 RPAREN
TOKEN1 LPAREN non_terminal1 SUBTRACT TOKEN2 non_terminal2 RPAREN
TOKEN1 LPAREN non_terminal1 EXP TOKEN2 non_terminal2 RPAREN
TOKEN1 LPAREN non_terminal1 MOD TOKEN2 non_terminal2 RPAREN
...

Damit der Gesamteffekt darin besteht, für jeden Bediener eine Regel für jeden Bediener zu nehmen außer gleich, das [^ Notation ist in den verschiedenen Sprachen der Bell Labs für etwas wie die Ergänzung eines Satzes üblich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top