2009-02-12 28 views
18

En realidad, quizás no sea un 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.Lex/Yacc para C#?

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

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

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

Respuesta

11

No estoy seguro Lex/Yacc será 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 consulte Irony.

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

+0

Aunque los tokenizadores básicos son bastante fáciles de escribir, he hecho varios a lo largo de los años, todavía no son gratuitos si alguien ya hizo el trabajo. Además, sí, he considerado PowerShell. No estoy lo suficientemente familiar como para decidir si encaja bien o no. –

+0

Consulte http://msdn.microsoft.com/en-us/library/ms714622.aspx para obtener información sobre los cmdlets. –

+0

Sería bueno tener C++ CLI lex/yacc – Dmitry

5

Aún CTP temprana 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/

+2

Si alguien se pregunta, está muerto: http://en.wikipedia.org/wiki/Oslo_(Microsoft) & http://en.wikipedia.org/wiki/M_(programming_language) – Athari

+1

Elvis está muerto también ... – KristoferA

3

Si no temes alfa y software desea una alternativa a Lex/Yacc para crear sus propios idiomas, puede consultar Oslo. Le recomendaría que se siente a través de las grabaciones de sesiones de las sesiones TL27 y TL31 desde last years PDC. TL31 aborda directamente la creación de idiomas específicos de dominio utilizando Oslo.

3

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

3

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

+2

Microsoft Visual Studio 2008 SDK tiene MPLex y MPPG en VisualStudioIntegration \ Tools \ Bin –

8

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

14

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

GPPG se pueden encontrar here y GPLEX here.

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.

+3

Al igual que una ruta de exploración, GPPG ahora se puede encontrar en http://gppg.codeplex.com/ y GPLEX es http://gplex.codeplex.com/ – Bklyn

3

Gardens Point Parser Generator here proporciona la funcionalidad Yacc/Bison para C#. Puede descargarse here. Se proporciona un ejemplo útil usando GPPG here

+0

Por el momento, tiene errores: traduce 'noassoc' a' right' (en resumen, acepta la entrada que debería ser incorrecta según la gramática). – greenoldman