2013-05-07 8 views
10

È possibile utilizzare il parser Marpa esistente per migliorare l'analisi di Perl 5 (ad esempio, sostituire tutti o frammenti del parser dell'interprete Perl esistente)?È possibile utilizzare Marpa per velocizzare l'analisi di Perl?

Mi sto chiedendo a un livello teorico, ad es. ignorando considerazioni pratiche come "se possibile, costerebbe 10.000 ore di lavoro".

In caso negativo, quali sono i problemi specifici che impediscono l'utilizzo di Marpa? (di nuovo, preferibilmente quelli teorici).

Per quanto riguarda il motivo per cui questo è interessante, Jeffrey Kegler (autore di Marpa) ha pubblicato un articolo piuttosto famoso "Perl Cannot Be Parsed: A Formal Proof" su PerlMonks nel 2008, che è stato influenzato dal suo lavoro in corso su Marpa.

+0

Come caveat, preferirei - se possibile - le risposte che vanno oltre il banale "[nessun parser può analizzare il codice Perl perché è possibile eseguire i blocchi di codice BEGIN durante la fase di compilazione] (http://stackoverflow.com/questions/1280594/can-perl-essere-statico-analizzato? RQ = 1)". Per esempio. mostra come e perché Marpa non può essere accoppiato con un lexer come l'attuale parser di perl sembra essere basato sulla mia comprensione da parte di un laico; o perché - anche se è possibile - Marpa sarebbe inferiore al parser esistente. – DVK

+2

Ho inviato il link di questa domanda a Marpa Google Gruppi di Jeffrey Kegler, spero che sarà interessato a rispondere sulla base del suo vecchio articolo PerlMonks "[Perl Can not Be Parsed: A Formal Proof] (http://www.perlmonks.org /? node_id = 663393) " – DVK

+0

Come potresti dirlo senza provarci? – ikegami

risposta

9

Grazie per avermelo chiesto. Il post perlmonks e il mio lavoro di parsing corrente affrontano due domande diverse se correlate. Domanda 1: Il Perl sta analizzando, nella sua piena generalità, decidibile da una macchina di Turing? Domanda 2: Marpa può, in pratica, analizzare Perl 5?

È possibile confrontare le due domande: "Il comportamento di ogni programma C è decidibile?" e "È possibile eseguire X eseguire programmi compilati in C?" Le risposte sono, rispettivamente, "no" e "sì per tutti gli scopi pratici e le scelte ragionevoli di X". Quindi il mio post perlmonks (aggiornato al here) riguarda la questione teorica se la sintassi dei programmi Perl, nella sua piena generalità, sia decidibile. Si noti che la decidibilità del parsing di Perl in quel contesto non ha nulla a che fare con Marpa, la discesa ricorsiva, il bisonte, ecc. - riguarda le macchine di Turing.

Domanda 2 è "Può Marpa guidare un parser Perl 5 pratico?" L'attuale parser di Perl 5 è LALR, con un lexer separato e un sacco di assistenza procedurale. Marpa è più potente di LALR, consente un lexer separato e offre molto più aiuto al codice procedurale rispetto a LALR. Ho indirizzato la domanda di velocità in a recent blog post: "Earley sta analizzando abbastanza velocemente?" Quello che ho appena detto è molto telegrafico - ma spero che spieghi come giustificherei la mia risposta "sì" alla domanda 2.

Nessun problema architettonico profondo si frappone alla guida di Marpa Perl 5 parser. A questo punto, è davvero una questione di livello di comfort.

Problemi correlati