Gibt es eine offizielle Terminologie für so etwas wie die Grammatik mit doppelten Anführungszeichen?

cs.stackexchange https://cs.stackexchange.com/questions/128538

Frage

In vielen Programmiersprachen ist eine Zeichenfolge ein Token.

Zum Beispiel:

 token               ::= '"' string
                       | digit nat

 string              ::= char string
                       | '"'

 nat                 ::= digit nat
                       | ϵ

Dies ist eine LL(1)-Grammatik für die Toke-Grammatik einiger Programmiersprachen.

Beim Parsen von a string, ist es nicht erforderlich, den Follow-Satz zu überprüfen, da es einen gibt " jeweils am Ende string.

Vergleichen mit nat, string ist einfacher zu analysieren.

Meine Frage ist

Gibt es eine offizielle Terminologie zu dieser Art von Grammatik?

Danke.


Bearbeitung:

Es gab einige Fehler in der ursprünglichen Grammatik, danke @rici für den Hinweis auf meine Fehler.

War es hilfreich?

Lösung

FOLLLOW-Sets werden bei der Analyse von beiden nicht verwendet string oder nat.In beiden Fällen muss der Parser lediglich feststellen, ob die Eingabe in einem Satz gültiger Symbole enthalten ist.Im Fall von nat, die gültigen Symbole sind Ziffern;im Fall von string, es sind andere Charaktere als ".(In echten Sprachen würde der Parser auch nach suchen \).In beiden Fällen ist jedoch eine Überprüfung erforderlich, und es gibt kein gutes Kriterium dafür, dass ein Test „einfacher“ ist als ein anderer.(In der Praxis handelt es sich bei beiden Prüfungen wahrscheinlich um eine einfache Tabellensuche.Sie sind also O(1).)

FOLLOW-Sets werden nur benötigt, wenn die Grammatik ε-Produktionen enthält.Selbst dann sind die Aktionen des Parsers nicht kompliziert.Komplizierter ist der Aufbau des Parsers, der nur einmal erfolgt.Das ist eigentlich keine so große Sache, aber es ist hinreichend bemerkenswert, dass es „ε-freie Grammatiken“ gibt.Ich glaube nicht, dass es ein gemeinsames Vokabular gibt, um den Unterschied zwischen explizit und implizit beendeter Wiederholung zu beschreiben, und es wird sowieso sehr schwierig sein, die Unterscheidung genau zu definieren.Dein string würde von einem Parser geparst werden, der eine andere Regel zum Sammeln der Nachfolge verwendet ", und es ist durchaus möglich, dass die beiden Parser am Ende dieselbe Implementierung erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit cs.stackexchange
scroll top