c#
enlace directo a las herramientas del compilador

Lex/Yacc para C#?



(12)

En realidad, tal vez no sea Lex / Yacc completo. Estoy implementando una interfaz de comando e intérprete para administrar una aplicación web. Estoy buscando algo que tome una definición de gramática y la convierta en un analizador que invoca directamente métodos en mi objeto. Similar a cómo ASP.NET MVC puede averiguar qué método de controlador invocar y cómo implementar los argumentos.

Por lo tanto, si el usuario escribe "create foo" en mi símbolo del sistema, debe invocar un método de forma transparente:

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

Ah, y si pudiera generar texto de ayuda a partir de (por ejemplo) atributos en esos métodos de controlador, eso también sería increíble.



Coco / R es un generador de compiladores con una implementación .NET. Podrías intentarlo, pero no estoy seguro de si conseguir que una biblioteca así funcione sería más rápido que escribir tu propio tokenizador.

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



Si no teme el software alfa y desea una alternativa a Lex / Yacc para crear sus propios idiomas, puede buscar en Oslo . Le recomendaría que se siente a través de las grabaciones de sesión de las sesiones TL27 y TL31 del PDC de los últimos años . TL31 aborda directamente la creación de idiomas específicos de dominio utilizando Oslo.


Sugeriría csflex - C # port of flex - el generador de escáner Unix más famoso.


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


También mira Antlr , que tiene soporte C #.


No estoy seguro de que Lex / Yacc sea de alguna ayuda. Solo necesitarás un tokenizador 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, vea Irony .

Como nota al margen: ¿ha considerado PowerShell y sus comandos?


Gardens Point Parser Generator proporciona funcionalidad Yacc / Bison para C #. Puede ser descargado aquí . Un ejemplo útil usando GPPG se proporciona aquí


Solo para el registro, la implementación del analizador léxer y LALR en C # para C #:

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

¡Debería ser similar en uso a Lex / Yacc, sin embargo esas herramientas (NLT) no son generadores! Por lo tanto, olvídate de la velocidad.


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


He hecho un par de proyectos pequeños con GPLEX / GPPG, que son reimplementaciones bastante directas de LEX / YACC en C #. No he usado ninguna de las otras herramientas anteriores, así que no puedo compararlas, pero funcionaron bien.

GPPG se puede encontrar aquí y GPLEX aquí .

Habiendo dicho eso, estoy de acuerdo, una solución completa de LEX / YACC probablemente sea excesiva para su problema. Sugeriría generar un conjunto de enlaces usando IronPython: se conecta fácilmente con el código .NET, los no programadores parecen encontrar que la sintaxis básica es bastante útil, y le da mucha flexibilidad / poder si decide usarla.