jueves, 14 de abril de 2011

Analizador Lexico hecho a mano en C++ QT 4.5


este ejemplo demuestra la implementacion de un analizador lexico a mano en C++, el lenguaje es muy simple, consiste en los elementos basicos de una calculadora, numeros enteros, +, -, *, / y espacios en blanco, ademas incluye el manejo de errores lexicos y contador de lineas y caracteres para localizar cada token en el archivo de entrada. 
el dfa utilizado en este ejemplo utiliza un estado final para cada token aunque no sea el dfa minimo, porque esto permite reconocer los tokens en funcion del estado final asociado, esto es mapear un estado final para cada token.

y la representacion tabular del automata


el ejemplo fue desarrollado en Debian GNU/Linux usando QT4.5 y su entorno de desarrollo QTCreator, aunque el codigo propio del analizador es C++ puro, si se utilizaron clases de la libreria QT para leer el archivo de entrada.

codigo fuente

ejemplo de salida del analizador


TOKEN [100]     NAME[NUMBER]    LINE NUMBER[1]    CHAR NUMBER [1]     Lexeme[3]
TOKEN [105]     NAME[WHITE SPACE]    LINE NUMBER[1]    CHAR NUMBER [2]     Lexeme[ ]
TOKEN [101]     NAME[ADD]    LINE NUMBER[1]    CHAR NUMBER [3]     Lexeme[+]
TOKEN [105]     NAME[WHITE SPACE]    LINE NUMBER[1]    CHAR NUMBER [4]     Lexeme[ ]