Ich habe gerade ein Projekt aktualisiert, das die Alpha-Version von ANTLR4 verwendet und das Anpassen eines leeren Satzes funktionierte gut. Alles, was passieren würde, war, dass ANTLR4 eine Warnung aussprechen würde, die sagte, dass es passender und leerer Satz war.Antlr4 - Leerer Satz im Lexer
Jetzt mit ANTLR Sprachunterstützung 1.2.1 und Parser-Generator 4.3.0 nun den Fehler wirft: „Error 1‚->‘als völlig überraschend zu mir kam, während eine Lexer Regel übereinstimmen“ in beiden Orten Ich benötige es, um einen leeren Satz zu finden.
es einen Teil des Codes bricht auf:
mode FILE_MODE;
ASCII: FASCII -> mode(PATH_MODE);
UTF8: FUTF8 -> mode(PATH_MODE);
UTF16: FUTF16 -> mode(PATH_MODE);
EMPTY_FILE_TYPE: -> skip, mode(PATH_MODE); // Throws the error on this line
Wie kann man nun eine leere Regel übereinstimmen?
Terry
Ich denke, ich habe den leeren Satz für das gezeigte Beispiel gelöst, aber im Moment kann ich nicht kompilieren, weil ein anderer, viel komplizierterer Modus auch einen leeren Satz zum Auflösen benötigt. Ich könnte den Modus in eine Reihe von Fragmenten zerlegen und dann die Fragmente wieder zusammenfügen als ein viel größeres Fragment und dann das '?' Operator. Dies erfordert jedoch, dass ein Fragment den Typ so ändern kann. ** Fragment MODIFIER_ID: FIDENT -> Typ (IDENT); **. Der Compiler akzeptiert die Syntax, aber ich habe sie nie irgendwo dokumentiert gesehen. Also, bevor ich mit dem Modifizieren beginne, ist die Syntax legal? – Terry151151
Sehen Sie sich den generierten Code an. Ziemlich gut lesbar. – GRosenberg