Qualcuno sa quale sia la famiglia più debole di algoritmi di analisi ampiamente utilizzati che può analizzare il codice C? Cioè la grammatica C LL (1), LR (0), LALR (1), ecc.? Sono curioso perché come progetto parallelo sono interessato a scrivere un generatore di parser per una di queste famiglie e vorrei essere in grado di analizzare il codice C per un altro progetto parallelo.Qual è l'algoritmo di analisi più semplice in grado di analizzare il codice C?
10
A
risposta
2
Sembra che parser Bison uses an LALR(1). I parser LALR sono più robusti dei parser LL, ma sono anche più complessi. Da ciò sospetto che LALR (1) sia probabilmente l'algoritmo di analisi più debole in grado di analizzare il codice C.
A meno che non siate davvero pronti a lanciare il vostro riconoscimento. ANTLR sarebbe probabilmente la scelta migliore per farlo. ANTLR utilizza un algoritmo LL * (che è, in effetti, LALR).
Problemi correlati
- 1. Come analizzare/analizzare semplice codice C/C++ da C# per ottenere un elenco di metodi
- 2. Perché il pacchetto R lubridate non è in grado di analizzare il vettore con più formati?
- 3. Qual è il modo più semplice per analizzare i numeri in clojure?
- 4. Strumenti di analisi del codice C++
- 5. Qual è il modo più semplice per analizzare JSON in Scala?
- 6. C#: qual è il modo più semplice per sottrarre tempo?
- 7. Analisi codice C#
- 8. Il modo più semplice per analizzare JSON in Qt 4.7
- 9. goniometro in grado di analizzare conf.js
- 10. Il server non è in grado di analizzare un codice jSON valido
- 11. Esiste una buona libreria Python in grado di analizzare C++?
- 12. Qual è il modo migliore per analizzare questo in C++?
- 13. Qual è il modo più semplice per analizzare JSON usando gson quando l'elemento da analizzare è un elemento di una stringa json?
- 14. JDK8: in grado di analizzare LocalTime
- 15. Qual è la più semplice implementazione RTTI per C++?
- 16. non in grado di analizzare i dati utilizzando JavaScriptDateTimeConverter
- 17. testo di analisi in C
- 18. Objective-c/IOS: qual è il modo più semplice di riprodurre un file audio all'indietro
- 19. Analisi codice C# CA
- 20. Qual è il modo più semplice in C# per convalidare se un'espressione regolare è ben formata?
- 21. Qual è il framework di registrazione più utilizzato in C#?
- 22. Qual è il cloud più semplice per contenuto Web statico
- 23. Qual è il modo migliore per analizzare (grande) XML nel codice C#?
- 24. Qual è il metodo più semplice di comunicazione tra processi tra 2 processi C#?
- 25. modo più semplice per analizzare una data in Javascript
- 26. Qual è il modo più semplice in C# per tagliare una nuova riga da una stringa?
- 27. Qual è il modo più semplice per ottenere l'input dell'utente in C?
- 28. Qual è il modo più semplice per effettuare più richieste Web di seguito?
- 29. Qual è il modo più semplice per utilizzare il comando HEAD di HTTP in PHP?
- 30. Come analizzare passivamente il simbolo di grado (Unicode) con le espressioni regolari?
La maggior parte dei parser sono costruiti in modo da riconoscere "troppo" e l'overage viene rifiutato da controlli aggiuntivi al di fuori del parser. Stando così le cose, la regex "[.] *" È il parser più debole che analizzerà C, anche se con molti controlli semantici aggiuntivi. Una volta che questo è ovvio, dovrebbe essere chiaro che puoi fare qualsiasi processo di generatore di parser C, modulo di hacking extra. (Sembra completamente pazzo scrivere un parser che accetta troppo poco come luogo di partenza). –
Ho appena inciampato di nuovo su questa domanda. L'ovvia risposta pratica è "ricorsiva codificata a mano dall'alto". Scommetto che il mio dollaro in fondo è il modo in cui è stato costruito il primo parser C (molto prima di YACC :) La domanda interessante su questo è, quanto pasticcio ci vuole oltre le basi? –