Quindi, per non reinventare la ruota, vorrei sapere cosa è già stato fatto per generare istruzioni casuali da un linguaggio context-free (come quelli prodotti da yacc, ecc.). Queste grammatiche sono principalmente per l'analisi, ma forse qualcuno ha fatto qualche generazione per testare i parser? GrazieGenerazione di n frasi da grammatiche context-free
risposta
Check out this blog post. Fondamentalmente, randomizza il RHS scelto in ogni applicazione di regole.
C'è un antico ma comunque interessante articolo here che mostra perché avete bisogno di un paio di vincoli per l'effettiva generazione di frasi casuali di te per l'analisi - suggerisce anche un modo semplice di fornire tali vincoli in più e dà un programma completo di esempio (... in Fortran IV ... ma, hey, è è oltre 40 anni ...! -).
Sfortunatamente non sono a conoscenza di alcun lavoro più recente su questo argomento (o implementazioni in lingue più moderne - ma la transcodifica del mazzo polveroso di Fortran in qualunque lingua ti piaccia non dovrebbe essere così difficile come arrivare a questi concetti da solo ;-) - questo è solo il tipo di materiale già antico che ho trovato nelle attuali librerie cartacee quando ero al college, e sono stupito che le strutture di ricerca online di ACM mi permettessero di individuare il riferimento Ho vagamente ricordato, così rapidamente (complimenti, ACM! -). Non ho mai fatto alcuna ricerca originale su questo argomento.
Generazione di una sequenza di token casuali come questa è un po 'strightforward; partendo dal simbolo dell'obiettivo, scegli qualsiasi espansione casuale di nonminminali non riempiti. Probabilmente vorrete una sorta di ricerca "branch-and-bound" in qualsiasi ramo dell'albero di analisi generato in modo da poter controllare profondità/dimensione.
Ma non vedo molto valore nel testare i parser in questo modo, almeno non se il generatore di parser accetta direttamente la descrizione del linguaggio senza contesto. Ciò accade quando si utilizza un generatore/strumento di parser libero da contesto completo come GLR (che è ciò che usiamo nel nostro sistema di trasformazione del programma, DMS) o un parser Earley.
Hai un altro problema: se vuoi testare un parser, devi nutrirlo di ciò che vuole, e sicuramente questo non è un token. Ora devi generare i lessemi validi per le foglie del terminale. Anche questo non è troppo difficile, ma volevi essere purista riguardo a questo approccio, scrivendo la tua grammatica in stile senza scanner.
Ma l'ultimo problema è che è difficile trovare una grammatica libera dal contesto per la maggior parte delle lingue. Quindi ora devi eseguire il debug della tua grammatica dell'oro; come lo farai? Una volta arrivato a questo punto, è probabile che ti arrendi, esegui il debug del parser e vai avanti con la tua vita.
La generazione di sottoalberi casuali è utile nel ripristino degli errori, se è possibile unire l'albero casuale per correggere il flusso di origine. Facciamo una forma semplificata di questo per il parser di DMS, il che significa che abbiamo solo un pezzo di macchinario per la gestione degli errori.
- 1. boost :: spirito che compone grammatiche da grammatiche
- 2. Generazione di numeri casuali da -n a n in C
- 3. componibili Grammatiche
- 4. Frasi di frasi con spaziatura
- 5. grammatiche perl6, segnalazione errori
- 6. Generazione di numeri binari di n cifre nel clojure
- 7. Rappresentazione RDF di frasi
- 8. come trovare frasi/frasi simili in R?
- 9. Generazione di report da Dynamodb
- 10. Generazione di tuple da tuple
- 11. Generazione di PDF da OpenXml
- 12. Conta più frequentemente 100 parole da frasi in Dataframe Panda
- 13. Dove sono le grammatiche dell'albero in ANTLR4?
- 14. Sono consentite le grammatiche boost-spirit ricorsive?
- 15. generazione binaria da LLVM
- 16. Generazione .afm da .ttf
- 17. trovare alcune frasi
- 18. stringa di Split in frasi
- 19. La generazione N sceglie Permutazioni K in C++
- 20. Generazione di combinazioni di colori da un'immagine
- 21. Clean modello per la localizzazione di frasi in Rails i18n
- 22. enumerare frasi in pitone
- 23. Estrazione di frasi causali con Python NLTK
- 24. Come utilizzare NLTK per generare frasi da una grammatica indotta?
- 25. Come posso generare frasi da una grammatica formale?
- 26. Generazione di diagrammi UML da sorgenti Scala
- 27. Generazione di script schema database da NHibernate
- 28. Generazione di miniature personalizzate da ALAssetRepresentation
- 29. Generazione di stub soaplib Python da WSDL
- 30. Generazione di Swagger YAML da JSDoc?
Simile a "fuzzing" (http://en.wikipedia.org/wiki/Fuzz_testing), forse alcuni di questi lavori possono essere sfruttati. –