2008-10-05 16 views
11

Estoy buscando un generador de escáner léxico decente para C# /. NET - algo que admite categorías de caracteres Unicode, y genera un código eficiente & que se puede leer. Alguien sabe de uno?C# /. NET Generadores de Lexer


EDIT: necesito soporte para Unicode categorías, no sólo los caracteres Unicode. Actualmente, solo hay 1421 caracteres en la categoría Lu (letra, mayúscula), y debo unir muchas categorías diferentes muy específicamente, y preferiría no escribir a mano los conjuntos de caracteres necesarios para ello.

También, código real es una necesidad - esto excluye las cosas que generan un archivo binario que se utiliza a continuación, con un conductor (es decir ORO)


EDIT: antlr no admite Categorías Unicode aún. Sin embargo, existe un open issue, por lo que podría adaptarse a mis necesidades algún día.

Respuesta

8

Parece que GPLEX cumple con sus requisitos.

+0

¿Cómo diablos nunca lo hice? saber acerca de GPPG? –

+0

Lo he estado usando durante años :) GPLEX recientemente (el año pasado). – leppie

1

Las dos soluciones que se me ocurren son ANTLR y Gold. ANTLR tiene un diseñador de gramática basado en GUI y un excelente proyecto de muestra en C# can be found here.

+0

oro no genera/código/para el analizador léxico - se construye un archivo binario especial que un conductor se lee en tiempo de ejecución. En cuanto a Antlr, no puedo encontrar nada que implique que sea compatible con Unicode/classes/(parece permitir caracteres Unicode especificados, pero no clases enteras) –

+0

ANTLR no admite clases de caracteres Unicode – artur02

1

Estoy de acuerdo con @David Robbins, ANTLR es probablemente su mejor opción. Sin embargo, el código ANTLR generado necesita una biblioteca de tiempo de ejecución separada para usar el código generado porque hay algunos análisis sintácticos de cadenas y otros elementos comunes de biblioteca en los que se basa el código generado. ANTLR genera un lexer Y un analizador.

En una nota al margen: ANTLR es genial ... Escribí una gramática de más de 400 líneas para generar más de 10k o código C# para analizar de manera eficiente un idioma. Esto incluyó un control de errores incorporado para cada posible cosa que podría salir mal en el análisis del lenguaje. Intenta hacer eso a mano, y nunca estarás al día con los errores.