Krótka wersja:Jak zdiagnozować niejednoznaczności w mojej gramatyce ANTLR4?
Używam
parser.addErrorListener(new DiagnosticErrorListener());
parser.getInterpreter().setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);
Ale kiedy uruchomić mój parser nie widzę żadnego wyjścia do wpływają na „reportAmbiguity ...” jako książka pokazuje ANTLR4. Jak mogę zobaczyć niejednoznaczności w mojej gramatyce?
Długa wersja:
prędkość parsowanie I obecnie dostać z ANTLR4 wynosi około 90KB/s na 8-core 2.67GHz Xeon E5640 maszynie. Prędkość leksykowania wynosi około 5mb/s, więc jest w porządku. Podczas próby optymalizacji mojego analizatora składni odkryłem dwustopniowe przetwarzanie, w którym pierwszy etap analizuje za pomocą PredictionMode.SLL, a jeśli to nie powiedzie się, to drugi etap wykorzystuje PredictionMode.LL. Korzystanie z tych dwóch trybów działa, i widzę, że niektóre dane wejściowe odnoszą sukces z SLL w krótszym czasie niż w przypadku LL.
Kwestia jest taka, że chciałbym, aby wszystkie (lub większość) odniosły sukces z SLL. Zakładam, że muszę usunąć niejasności z mojej gramatyki, aby to osiągnąć. Chciałbym, aby ANTLR4 powiedział mi o jakichkolwiek niejasnościach, abym mógł je rozwiązać.
Usuń mój komentarz. Wygląda na to, że nie został zrobiony wystarczająco starannie. –
Myślę, że to pytanie jest trudne do rozwiązania, bez posiadania konkretnej gramatyki, czy je masz? – CoronA