Domanda

mi stavo godendo con YARD molto:

http://www.ootl.org/yard/

http://code.google.com/p/yardparser/

http://www.codeproject.com/KB/recipes/yard- tokenizer.aspx

Sono stato in grado di costruire calcolatrice completamente funzionale. Sto valutando YARD fare PHP parser. Si prega di avvisare gentilmente sulle limitazioni di PEG grammatica e parser generatori. Grazie mille!

È stato utile?

Soluzione

Credo che il grande "problema" con PEG è che non si adattano al normale tassonomia delle grammatiche in quanto operano in un modo fondamentalmente diverso. grammatiche normali sono "indietro", nel senso che essi descrivono tutte le possibili frasi (programmi) che può essere generata. PEG descrivono come analizzare - arrivano al problema dall'altro capo

.

A mio avviso questo è un modo più naturale di pensare al problema, e certamente per qualsiasi (ricorsiva-discesa) parser scritto a mano non vorrei fare altro.

Altri suggerimenti

Il principale limite di grammatiche PEG è che essi non si occupano ambiguità affatto.

A dire il vero, questa è anche la loro forza dal momento che si tratta di ambiguità è una delle parti più frustranti di utilizzare uno strumento CFG (contesto gratuito grammatica).

Con PEG avete a che fare con le ambiguità esplicitamente ordinando la regola che si desidera far corrispondere prima di un'altra regola che sarebbe partita in modo ambiguo, ma che non si desidera.

Il problema è che non sempre sa nemmeno su alcuni o anche qualsiasi delle ambiguità in una lingua o una grammatica e generatori di PEG, almeno quelli che ho provato, non analizzano la grammatica per l'ambiguità di aiutarvi a trovare loro e poi creare e ordinare le regole per trattare con loro nel modo giusto.

generatori CFG parser come yacc e bisonti analizzare la grammatica e segnalare tutte le ambiguità. Purtroppo spesso li riportano in un modo piuttosto criptico che può essere difficile dare un senso. E, naturalmente, è spesso difficile da correggere la grammatica di trattare con loro. Ma almeno sarete consapevoli che esistono.

Con una grammatica PEG si può essere beatamente ignoranti delle ambiguità nella tua grammatica concettuale perché una volta che ne fanno un PEG non ha ambiguità più, solo che ha regole di corrispondenza e le regole forse silenziosamente irraggiungibili che sarebbe anche corrispondere se avevano precedenza maggiore. Questi potrebbero non apparire nella vostra prova, ma possono apparire dopo il rilascio.

Con CFG grammatiche si è costretti a trattare con le ambiguità durante lo sviluppo, ma non sarà facile.


Nel caso in cui non sto mettendo in chiaro, ecco una discussione di sei anni di Joshua Haberman sopra il Lambda Ultimate linguaggi di programmazione blog: PEG e Packrat di analisi non sono la risposta .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top