Esiste un modo noto per generare un elenco di "Expected token" quando si verifica un errore di sintassi? Sto usando Lemon come generatore di parser."Token previsto" utilizzando il generatore di parser di limone
risposta
Questo sembra funzionare:
%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]);
}
}
}
tenta tutte le possibili gettoni e stampa quelli che sono in vigore nello Stato parser corrente.
Nota che quando arriva un token non corretto, il parser non chiama immediatamente syntax_error, ma prova a ridurre quello che è in stack sperando che il token possa essere spostato in seguito. Solo quando nient'altro può essere ridotto e il token corrente non può essere spostato, il parser chiama syntax_error. Le riduzioni cambieranno lo stato del parser, il che significa che potresti vedere meno token di quelli che sarebbero stati applicabili prima delle riduzioni. Dovrebbe essere sufficiente per la segnalazione degli errori.
Non esiste un metodo diretto per generare tale elenco in Lemon. Ma puoi provare a farlo usando l'output di debug dello strumento Lemon e la traccia di debug del parser generato. Dopo la chiamata alla funzione ParseTrace, il parser generato stampa l'elenco di Shifts e Riduci si applica al flusso di input. L'ultimo Shift prima dell'errore di sintassi contiene il numero dello stato corrente prima dell'errore. Trova questo stato nel file * .out per il parser e vedi l'elenco dei token previsti per esso.
- 1. Generatore di parser/parser combinato
- 2. Problemi con grammatica di limone (precedenza?)
- 3. Generatore di parser JSON in .NET/WPF?
- 4. Generatore di parser di espressioni regolari
- 5. Quale generatore di parser utilizza CPython?
- 6. Previsto id non qualificato prima di '[' token
- 7. Errore: Previsto ')' prima '*' token
- 8. C: errore: previsto ')' prima di ';' Token
- 9. previsto '=', ',', ';', 'asm' o '__attributo__' prima di '.' token
- 10. Token imprevisto errore parser Angular2
- 11. Problema di implementazione del generatore di parser LALR
- 12. Impossibile ottenere il valore utilizzando la chiave in una mappa in forma di foglia di limone?
- 13. Tracking Position quando i token di digitalizzazione complica Parser
- 14. Scala: URL con parser di query e generatore DSL
- 15. Quando è pratico utilizzare un generatore di parser?
- 16. costante di campo utilizzando il generatore di query laravel
- 17. Quali strumenti di generatore di parser basati sulla grammatica esistono per il rubino?
- 18. Il generatore di parser ANTLR è il migliore per un'applicazione C++ con memoria vincolata?
- 19. Ereditarietà: nome classe previsto prima del token '{'
- 20. Cognito User Pool: come aggiornare il token di accesso utilizzando il token di aggiornamento
- 21. Come faccio ad aggiornare il mio token di accesso google_oauth2 utilizzando il mio token di aggiornamento?
- 22. ERRORE: "Errore di sintassi sul token"; ", previsto" Perché?
- 23. Il generatore di numeri casuali dà lo stesso primo risultato ma si comporta come previsto
- 24. Come ottenere un token di accesso aggiornato utilizzando il token di aggiornamento memorizzato
- 25. python: esiste un parser XML implementato come generatore?
- 26. Problema di parser Spirit e Lex parser
- 27. Gestione dei token di aggiornamento utilizzando rxjs
- 28. Utilizzando Twitter per ottenere portatore di token
- 29. "token imprevisto" utilizzando jolly inferiore delimitata (Java)
- 30. token csrf utilizzando
Esattamente quello che stavo chiedendo! Tuttavia, hai dimenticato un 'yypParser' come primo parametro di yy_find_shift_action :) –