2011-01-24 10 views
10

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?

+0

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). –

+0

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? –

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