2015-04-03 22 views
5

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ć.

+0

Usuń mój komentarz. Wygląda na to, że nie został zrobiony wystarczająco starannie. –

+0

Myślę, że to pytanie jest trudne do rozwiązania, bez posiadania konkretnej gramatyki, czy je masz? – CoronA

Odpowiedz

1

Wystąpił ten sam problem, gdy usunąłem ConsoleErrorListener z parser.removeErrorListener();. Możesz sprawdzić słuchaczy za pomocą kodu poniżej:

for (ANTLRErrorListener listener : parser.getErrorListeners()) { 
     System.out.println(listener); 
} 
Powiązane problemy