Domanda

In realtà, forse non Lex/Yacc in piena regola.Sto implementando un front-end di interprete dei comandi per amministrare una webapp.Sto cercando qualcosa che prenda una definizione grammaticale e la trasformi in un parser che invochi direttamente metodi sul mio oggetto.Simile al modo in cui ASP.NET MVC può capire quale metodo del controller richiamare e come collegare gli argomenti.

Pertanto, se l'utente digita "crea foo" al prompt dei comandi, dovrebbe chiamare in modo trasparente un metodo:

private void Create(string id) { /* ... */ }

Oh, e se potesse generare testo di aiuto da (ad esempio) attributi su quei metodi del controller, anche quello sarebbe fantastico.

È stato utile?

Soluzione

Non sono sicuro di Lex / Yacc sarà di alcun aiuto. Avrete solo bisogno di un tokenizzatore di base e un interprete, che sono più veloci a scrivere a mano. Se siete ancora in via di analisi vedere Ironia .

Come sidenote: avete considerato PowerShell e le sue commandlets

?

Altri suggerimenti

Ho fatto un paio di piccoli progetti con GPLEX / GPPG, che sono abbastanza semplici reimplementazioni di LEX / YACC in C #. Io non ho usato uno qualsiasi degli altri strumenti di cui sopra, quindi non posso davvero confrontarli, ma questi ha funzionato bene.

GPPG può essere trovato qui e GPLEX qui .

Detto questo, sono d'accordo, una soluzione completa LEX / YACC probabilmente è eccessivo per il vostro problema. Vorrei suggerire la generazione di una serie di attacchi utilizzando IronPython: si interfaccia facilmente con il codice .NET, non programmatori sembrano trovare la sintassi di base abbastanza usabile, e ti dà un sacco di flessibilità / potenza se si sceglie di usarlo

Anche guardare Antlr , che ha il sostegno C #.

CTP ancora presto quindi non può essere utilizzato in applicazioni di produzione, ma si può essere interessati a Oslo / MGrammar: http://msdn.microsoft.com/en-us/oslo/

Jison è sempre un sacco di trazione di recente. Si tratta di una porta Bison a JavaScript. A causa della sua natura estremamente semplice, ho porting del modello di analisi Jison / lexing a PHP, e ora a C #. E 'ancora molto nuovo, ma se si ha la possibilità, date un'occhiata qui: https://github.com/robertleeplummerjr/jison/tree/master/ports/csharp/Jison

Se non temi il software alpha e desideri un'alternativa a Lex / Yacc per creare i tuoi linguaggi, potresti esaminare Oslo.Ti consiglierei di ascoltare le registrazioni delle sessioni TL27 e TL31 da PDC degli ultimi anni.TL31 affronta direttamente la creazione di linguaggi specifici di dominio utilizzando Oslo.

Coco / R è un generatore compilatore con un'implementazione NET. Si potrebbe provare che fuori, ma io non sono sicuro se ottenere un tale libreria di lavoro sarebbe stato più veloce di scrivere il proprio tokenizzatore.

http: //www.ssw.uni-linz. ac.at/Research/Projects/Coco/

Vorrei suggerire csflex - C # porto di flessione -. Più famoso generatore di scanner unix

Credo che lex / yacc si trovano in una delle SDK già (vale a dire RTM). Windows o .NET Framework SDK.

punto giardini generatore di parser qui fornisce funzionalità Yacc / Bison per C #. Può essere donwloaded qui . Viene fornito un esempio utile utilizzando GPPG qui

Come ha detto Anton, PowerShell è probabilmente la strada da percorrere. Se si desidera una lex / yacc implementazione poi Malcolm Crowe ha un buon set.

Modifica Link diretto agli strumenti di compilatore

Per la cronaca, l'attuazione di lexer e parser LALR in C # per C #:

http://code.google.com/p/naive-language-tools /

Dovrebbe essere simili in uso al Lex / Yacc, siano tali strumenti (NLT) non sono generatori! Così, dimenticare velocità.

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