Czy istnieje znany sposób generowania listy "Oczekiwany token" w przypadku wystąpienia błędu składni? Używam Lemon jako generatora parsera."Oczekiwany token" za pomocą generatora analizatora cytryny
Odpowiedz
To wydaje się działać:
%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]);
}
}
}
Próbuje wszystkich możliwych znaków i wypisuje te, które są stosowane w obecnym stanie parsera.
Należy zauważyć, że gdy pojawi się niepoprawny token, parser nie od razu wywołuje funkcję syntax_error, ale próbuje zmniejszyć to, co na stosie, mając nadzieję, że token zostanie później przesunięty. Dopiero gdy nic innego nie może zostać zredukowane, a bieżący token nie może zostać przesunięty, parser wywołuje funkcję syntax_error. Obniżki zmienią stan parsera, co oznacza, że możesz zobaczyć mniej żetonów, niż byłoby to możliwe przed redukcją. Powinno to jednak wystarczyć do zgłaszania błędów.
Nie ma bezpośredniej metody generowania takiej listy w Lemon. Ale możesz spróbować zrobić to za pomocą wyjścia debugowania narzędzia Lemon i śledzenia debugowania wygenerowanego analizatora składni. Po wywołaniu funkcji ParseTrace wygenerowany parser wypisuje listę zmian i zmniejsza ją do strumienia wejściowego. Ostatni błąd przed błędem składni zawiera numer bieżącego stanu przed błędem. Znajdź ten stan w pliku * .out dla swojego analizatora składni i zobacz listę oczekiwanych tokenów dla niego.
- 1. Kiedy można używać generatora analizatora składni?
- 2. Problemy z gramatyką cytryny (pierwszeństwo?)
- 3. Uzyskaj token za pomocą Github API
- 4. Jak przechwycić zdarzenia Attribute za pomocą analizatora składni XML StAX?
- 5. Dlaczego nie można przetworzyć C++ za pomocą analizatora LR (1)?
- 6. Jak trenować sieć TensorFlow za pomocą generatora do produkcji wejść?
- 7. "Oczekiwany obiekt" błąd za pomocą jQuery tylko w IE8
- 8. Tworzenie leksykalnego analizatora
- 9. JWT (Json web token) Vs Custom Token
- 10. Jak wygenerować token uwierzytelniający za pomocą JWT dla Google firebase?
- 11. Jak zdobyć token dostępu Facebook za pomocą biblioteki Python?
- 12. Nieprawidłowy token przy zresetowaniu hasła za pomocą ASP.NET Identity
- 13. Jak zapisać token dostępu LinkedIn za pomocą zestawu SDK iOS?
- 14. Nieoczekiwany token importu - testowanie w trybie macierzystym za pomocą Jest
- 15. Jak uzyskać token dostępu z ACS za pomocą asercji SAML?
- 16. Jak automatycznie odświeżyć wygasły token za pomocą AFOAuth2Manager?
- 17. Jak wygenerować token dostępu za pomocą odświeżania tokenu za pomocą interfejsu google drive API?
- 18. Generator analizatora składni dla Celu C?
- 19. Opcja gitów generatora szyny 3 generatora?
- 20. Lucene Highlighter z analizatorem analizatora obrazu
- 21. Znaczniki analizatora Stanforda
- 22. PMD - ostrzeżenia analizatora kodu
- 23. Pisanie prostego analizatora składni
- 24. Inteligentny projekt analizatora matematycznego?
- 25. Jak uzyskać wartość domyślną opcjonalnego parametru za pomocą interfejsu API analizatora Dart?
- 26. Jak sprawdzić poprawność pliku xml dla danego pliku xsd podczas analizowania go za pomocą analizatora sax?
- 27. Python: Jak sprawdzić aktualizacje RSS za pomocą analizatora kanałów i etykiet
- 28. Identyfikatory analizatora i tekst w formacie swobodnym. Czy można to zrobić za pomocą FParsec?
- 29. Wyjaśnienie generatora liczb pierwszych?
- 30. Oczekiwany błąd aplikacji aplikacji MEAN
Dokładnie o co prosiłem! Jednak zapomniałeś "yypParser" jako pierwszego parametru yy_find_shift_action_ :) –