Pregunta

En realidad, tal vez no esté lleno-soplado Lex / Yacc. Estoy poniendo en práctica un front-end-intérprete de comandos para administrar una aplicación web. Estoy buscando algo que va a tomar una definición gramatical y convertirla en un analizador que invoca directamente métodos en mi objeto. Similar a la forma ASP.NET MVC puede averiguar qué método controlador para invocar, y la forma de caballo hasta los argumentos.

Por lo tanto, si el usuario escribe "Crear foo" en mi símbolo del sistema, se debe llamar a un método transparente:

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

Ah, y si se pudiera generar el texto de ayuda de (por ejemplo) los atributos de los métodos de controlador, eso sería impresionante, también.

¿Fue útil?

Solución

No estoy seguro de Lex / Yacc será de ninguna ayuda. Usted sólo necesita un tokenizer básico y un intérprete, que son más rápidos de escribir a mano. Si todavía está en la ruta de análisis sintáctico ver Ironía .

Como nota al margen: ¿ha considerado PowerShell y sus commandlets

?

Otros consejos

He hecho un par de pequeños proyectos con Gplex / GPPG, que son bastante sencillas de reimplementaciones LEX / YACC en C #. No he utilizado ninguna de las otras herramientas anteriores, así que no puedo comparar, pero éstos funcionó bien.

GPPG se puede encontrar aquí y Gplex aquí .

Una vez dicho esto, estoy de acuerdo, una solución completa LEX / YACC probablemente es excesivo para su problema. Yo sugeriría que genera un conjunto de enlaces mediante IronPython: interactúa fácilmente con el código de .NET, no programadores parecen encontrar la sintaxis básica bastante utilizable, y le da una gran flexibilidad / potencia si decide utilizarlo

También mire Antlr , que cuenta con el apoyo de C #.

CTP todavía temprano por lo que no se puede utilizar en aplicaciones de producción, sino que puede estar interesado en Oslo / MGrammar: http://msdn.microsoft.com/en-us/oslo/

Jison está recibiendo mucha tracción recientemente. Es un puerto de Bison para javascript. Debido a su naturaleza extremadamente simple, he portado la plantilla Jison análisis / léxico a php, y ahora a C #. Todavía es muy nuevo, pero si tienes la oportunidad, echar un vistazo a aquí: https://github.com/robertleeplummerjr/jison/tree/master/ports/csharp/Jison

Si no temes el software alfa y desea una alternativa a Lex / Yacc para crear sus propios idiomas, se puede intentar Oslo . Yo recomendaría que se siente a través de grabaciones de sesiones de sesiones TL27 y TL31 de últimos años PDC . TL31 se dirige directamente a la creación de Lenguajes Específicos de Dominio utilizando Oslo.

Coco / R es un generador de compilador con una aplicación .NET. Se podría intentar eso, pero no estoy seguro de si conseguir una biblioteca de este tipo funcione sería más rápido que escribir su propio tokenizer.

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

Yo sugeriría csflex - C # puerto de flexión -. Más famoso generador de escáner UNIX

Creo que lex / yacc están en una de ya los SDK (es decir, RTM). Windows o .NET Framework SDK.

Jardines Point Analizador generador aquí proporciona funcionalidad Yacc / Bison para C #. Se puede donwloaded aquí . Se proporciona un ejemplo útil usando GPPG aquí

Como dijo Anton, PowerShell es probablemente el camino a seguir. Si se desea un / aplicación de la lex yacc continuación, Malcolm Crowe tiene un buen conjunto.

Editar Enlace Directo a las herramientas de compilación

Sólo para que conste, la aplicación del léxico y analizador LALR en C # para C #:

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

Debe ser similar en uso a Lex / Yacc, sin embargo esas herramientas (NLT) no son generadores! Por lo tanto, olvidarse de velocidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top