Gibt es eine bekannte Parser-Beschreibungssprache (wie Backus-Naur), die Wiederholungen erlaubt, bei denen die Anzahl der Wiederholungen aus dem Token-Stream extrahiert wird? Gibt es für Bonuspunkte C++ - Bibliotheken, die diese Syntax unterstützen?Parser-Beschreibung mit Wiederholung "Meta-Token"
Beispiel:
Lässt die "Meta-Token" # aufrufen, dann für eine Beschreibungssprache Ich bin auf der Suche, die eine Produktionsregel der folgenden Form behandeln würde:
RULE = # EXPRESSION
As:
RULE = '1' EXPRESSION
| '2' EXPRESSION EXPRESSION
| '3' EXPRESSION EXPRESSION EXPRESSION
| '4' EXPRESSION EXPRESSION EXPRESSION EXPRESSION
| ...
Beachten Sie, dass die Zähler tatsächliche Zeichenliterale sind. Dies steht im Gegensatz zu augmented Backus-Naur form, wo wir Regeln der Form haben kann:
RULE = 2*3EXPRESSION
Welche sind äquivalent zu:
RULE = EXPRESSION EXPRESSION
| EXPRESSION EXPRESSION EXPRESSION
Antwort auf dgarant:
Ich bin mir nicht sicher, das ist ganz was ich möchte. Ich denke etwas entlang der folgenden Zeilen:
int i;
bool r = phrase_parse(first, last,
(
int_[ phoenix::ref(i) = _1] >> repeat(i)[/*EXPRESSION*/]
)
space);
Noch wichtiger, obwohl ich auf ein formalisiertes Schema gehofft hatte, das diese Idee beschreiben könnte. Auf einem Seitenknoten braucht Spirit einiges, aber es ist ziemlich beeindruckend. Ich bin ein Fan.
Ich habe oben einen Kommentar hinzugefügt. – tgoodhart
@tgoodhart Ich habe meine Antwort aktualisiert. Ich kann mir keinen Sprachstandard vorstellen, der genau das macht, wonach Sie suchen. –