Analizador Léxico en C#

Según wikipedia :
Un analizador léxico o analizador lexicográfico (en inglés scanner) es un programa que recibe como entrada el código fuente de otro programa (secuencia de caracteres) y produce una salida compuesta de tokens (componentes léxicos) o símbolos. Estos tokens sirven para una posterior etapa del proceso de traducción, siendo la entrada para el analizador sintáctico (en inglés parser).
Es decir un analizador léxico lee el codigo fuente de un programa y saca sus simbolos y palabras conocidas como tokens, el + -* ) [] ^, palabras reservadas, etc. etc. sencillo ;) jejeje

Un amigo vino para que le heche una mano con el analizador léxico y no pude negarme, sus requerimientos eran realizarlo en lenguaje C# en visual studio .net y las interfaces en microsoft expresion blend, vaya joda. (Que tiene que ver interfaces gráficas con compiladores, luego enviaran compilador con botones rosados retocados en photoshop CS X)
Por supuesto que no lo utilice jeje, lo realice en monodevelop 2.2 con mi debian squeeze, basandome en las ideas de este blog que nos cayó como anillo al dedo ya que el tenia hecho el automata del lenguaje C# básico las palabras reservadas las manejaba en una lista y no en el automata pero no es problema .

Entonces decidímos hacer un léxico estandar que pasandole cualquier automata este se comporte con ese lenguaje
se trató de hacer lo mas modular posible y que sea fácil de entender una clase que maneje la tabla de transición, otra para los tokens otra para las palabras reservadas si es que es necesario, porque si las palabras reservadas estan definidas en el automata no es necesario usar un listado de estas.
Queda pendiente un algoritmo para generar las tablas compactas y utilizar estas en vez de la gran matriz de transición.

Adjunto el proyecto que como mencione está hecho en monodevelop, cualquier duda responderé y si hay intención de mejorarlo o mejor pasarlo a otro lenguaje avísemen y si puedo les ayudo, que tal python ? me gusta mucho.

No podía faltar todo el código es GNU GPL v3 o superior, el codigo fuente en C del blog que se tomo algunas ideas también es GPL asi que no hay problema.

Si hay tiempo seguiremos con las demas partes que faltan

AdjuntoTamaño
Lexico.tar.gz38.82 KB