Vale a dire, c'è uno strumento là fuori che mostrerà automaticamente la lingua completa per una determinata grammatica, incluse le ambiguità di evidenziazione (se presenti)?Qual è il modo più semplice per dire se una grammatica BNF è ambigua o no?
risposta
Potrebbe esserci qualche particolarità sulle grammatiche in stile BNF, ma in generale, decidere se una data grammatica libera dal contesto (come BNF) è ambigua non è possibile.
In breve, non esiste uno strumento perché, in generale, questo strumento è matematicamente impossibile. Potrebbero esserci alcuni casi speciali che potrebbero funzionare per te, comunque.
In particolare, è possibile controllare se una grammatica è ambigua se lo è, ma non puoi provare che non lo è. – OrangeDog
@OrangeDog: Beh, in generale non puoi provarlo, ma è possibile per alcune grammatiche (qui c'è una piccola grammatica per la quale puoi facilmente provarlo: "goal = a;"). –
In generale, n.
Ma come approccio pratico, ciò che si può fare, viene data una grammatica, è per ogni regola, per elencare possibili stringhe di terminali/non terminali validi, per vedere se una regola ha due o più derivazioni equivalenti (che sarebbe un'ambiguità).
Il nostro DMS Software Reengineering Toolkit è un sistema di trasformazione del programma per langaugari di computer arbitrari, guidato da descrizioni grammaticali esplicite. DMS utilizza un generatore di parser per pilotare il suo motore di analisi GLR.
Il generatore di parser di DMS opzionalmente il controllo dell'ambiguità tracciato sopra, eseguendo una ricerca iterativa di approfondimento su tutte le regole di grammatica. Questo è pratico perché ha le tabelle di analisi per guidare in modo efficiente l'enumerazione delle scelte. Puoi dirlo per eseguire questo controllo fino a una profondità scelta. Può richiedere molto tempo se si sceglie una profondità di qualsiasi dimensione interessante, ma in realtà una profondità di 3 o 4 è sufficiente per trovare molte stupide ambiguità introdotte in una grande grammatica. Generalmente lo facciamo durante il nostro debugging iniziale della grammatica, e nel punto in cui pensiamo di averlo più o meno giusto.
Nota: il software DMS collegato costa denaro. Il sito web non elenca il prezzo; devi chiamare per un preventivo. –
- 1. ANTLR Qual è il modo più semplice per realizzare la grammatica basata su indent python?
- 2. Convertire BNF grammatica pyparsing
- 3. Grammatica ambigua
- 4. Qual è il modo più semplice per leggere diversi ints da stdin se è ok fallire?
- 5. Qual è il modo più semplice in C# per convalidare se un'espressione regolare è ben formata?
- 6. C#: qual è il modo più semplice per sottrarre tempo?
- 7. Qual è il modo più semplice per mantenere oggetti java?
- 8. Modello Meteor: qual è il modo più semplice per verificare se un utente ha effettuato l'accesso?
- 9. Lexer/parser per generare il codice Scala dalla grammatica BNF
- 10. Qual è il modo più semplice per ottenere Grammar :: Tracer lavorando su Perl6 stesso?
- 11. In RethinkDB, qual è il modo più semplice per verificare se esiste un database o una tabella?
- 12. come posso dimostrare che questa grammatica è ambigua?
- 13. Qual è il modo più affidabile per verificare se una variabile JavaScript è nullo?
- 14. Qual è il cloud più semplice per contenuto Web statico
- 15. Qual è il modo più semplice per verificare se la stringa contiene un tag immagine?
- 16. Qual è il modo più semplice per determinare se `<input type =" email "..` (per esempio) è supportato nel browser corrente?
- 17. Qual è il modo semplice per fallire una build quando una proprietà non è impostata?
- 18. Il modo più semplice per verificare se una stringa arbitraria è un nome file valido
- 19. Qual è un modo semplice per dire se un elenco di parole è un anagramma l'uno dell'altro?
- 20. Qual è il modo migliore per determinare se una pagina Web è per dispositivi mobili?
- 21. Qual è il modo più semplice in C# per tagliare una nuova riga da una stringa?
- 22. Qual è il modo più semplice per chiamare una funzione del kernel di Windows da Java?
- 23. Qual è il modo più semplice per creare una tabella Excel con C#?
- 24. Qual è il modo più semplice per scambiare il char in una stringa con Python?
- 25. C'è un modo per determinare se una funzione è in esecuzione nel documento pronta o no?
- 26. Qual è il modo Pythonic per implementare un semplice FSM?
- 27. Qual è il modo più semplice per ottenere dati spaziali sql 08 su una mappa?
- 28. Qual è il modo più semplice per sottrarre un mese da una data in Python?
- 29. Qual è la differenza tra grammatica lessicale e grammatica sintattica?
- 30. Qual è il modo più semplice/veloce per scoprire quando è stato creato un ramo git?
Forse questo è rilevante: http://cstheory.stackexchange.com/questions/4352/how-is-proving-a-context-free-language-to-be-ambiguous-undecidable –