Gibt es eine bekannte Möglichkeit, eine "Expected Token" -Liste zu generieren, wenn ein Syntaxfehler auftritt? Ich benutze Lemon als Parsergenerator."Expected token" mit Citrix Parser Generator
Antwort
Dies scheint zu funktionieren:
%syntax_error {
int n = sizeof(yyTokenName)/sizeof(yyTokenName[0]);
for (int i = 0; i < n; ++i) {
int a = yy_find_shift_action(yypParser, (YYCODETYPE)i);
if (a < YYNSTATE + YYNRULE) {
printf("possible token: %s\n", yyTokenName[i]);
}
}
}
Es wird versucht, alle möglichen Token und druckt diejenigen, die in der aktuellen Parser-Zustand anwendbar sind.
Beachten Sie, dass wenn ein falsches Token kommt, der Parser syntax_error nicht sofort aufruft, sondern versucht, den Stack zu reduzieren, in der Hoffnung, dass der Token danach verschoben werden kann. Nur wenn nichts anderes reduziert werden kann und das aktuelle Token nicht verschoben werden kann, ruft der Parser syntax_error auf. Die Reduzierungen ändern den Parserstatus, was bedeutet, dass Sie möglicherweise weniger Token sehen, als vor den Reduzierungen anwendbar gewesen wären. Es sollte jedoch für die Fehlerberichterstattung ausreichen.
Es gibt keine direkte Methode, um solche Liste in Lemon zu erzeugen. Sie können dies jedoch mit der Debug-Ausgabe des Lemon-Tools und der Debug-Verfolgung des generierten Parsers versuchen. Nach dem Aufruf von ParseTrace generiert der erzeugte Parser eine Liste von Verschiebungen und Reduzierungen, die auf den Eingabestrom angewendet werden. Der letzte Shift-vor-Syntaxfehler enthält die Nummer des aktuellen Zustands vor dem Fehler. Finden Sie diesen Status in der * .out-Datei für Ihren Parser und sehen Sie sich die Liste der erwarteten Token an.
- 1. Kombinierter Unparser/Parser-Generator
- 2. Parser Generator für Delphi?
- 3. Welchen Parser-Generator verwendet CPython?
- 4. Scala Parser Token Delimiter Problem
- 5. Parser, Generator für Java mit den folgenden Anforderungen
- 6. Parser-Beschreibung mit Wiederholung "Meta-Token"
- 7. Lemon Parser Parsing 0 Token
- 8. CSS-Parser + XHTML Generator, Beratung erforderlich
- 9. Welcher Parser-Generator soll meine Schüler unterrichten?
- 10. Parser-Generator, der C# mit einer BNF-Grammatik ausgibt?
- 11. Hinzufügen von Token-Generator zu Rails App
- 12. Welche grammatikbasierten Parser-Generator-Tools gibt es für Ruby?
- 13. Wann verwende ich Parser-Generator, wann ist Regex genug?
- 14. Hilf mir, einen geeigneten Ruby/Python-Parser-Generator zu finden
- 15. Citrix wfapi/mfcom Arbeitsbeispiel
- 16. citrix Empfänger Verbindungsleiste
- 17. Python: Gibt es einen XML-Parser als Generator?
- 18. Was ist ein guter C# Compiler-Compiler/Parser Generator?
- 19. Citrix und keybd_event Problem
- 20. unerwartete tidentifier expected keyword_end
- 21. UITesting Citrix-Anwendung mit Visual Studio 2015
- 22. Anmelden bei Citrix-Maschine mit Robot-Framework
- 23. Kompilierfehler mit: switch, "expected expression before"
- 24. socket.io mit Express-Generator
- 25. Migration von Python 2.7 auf 3.4 Token Generator Codierung
- 26. Verwenden Sie Funktionen in Telerik MVC Grid-Filter? (Ausnahme "Expected token")
- 27. Jacson-Parser: Unbekanntes Token 'tieheT': erwartete 'null', 'wahr' oder 'falsch'
- 28. getRandomValues () im Knoten: "expected Uint8Array"
- 29. Nachricht an Citrix-Sitzung senden
- 30. Fehler bei der Aktion für die iPhone App kompilieren: "error: expected ')' before ';" Token "
Genau das, wonach ich gefragt habe! Sie haben jedoch einen 'yypParser' als ersten Parameter von yy_find_shift_action vergessen :) –