Análisis Léxico es la primera fase de un compilador. Toma el código fuente modificado preprocesadores de idioma que se escriben en la forma de las sentencias. El analizador léxico se rompe estas sintaxis en una serie de fichas, quitando cualquier espacio en blanco o los comentarios en el código fuente.
Si el analizador léxico encuentra un token no válido, se genera un error. El analizador léxico trabaja en estrecha colaboración con la sintaxis analizador. Lee caracteres corrientes desde el código fuente, comprueba de tokens, y pasa los datos a la sintaxis analizador cuando que exige.
Lexema resultante- se dice que son una secuencia de caracteres (alfanumérico) en un token. Hay algunas reglas predefinidas para cada lexeme a ser identificado como un token válido. Estas reglas se definen las reglas de gramática, por medio de un patrón. Un patrón se explica lo que puede ser un testigo, y estos patrones se definen por medio de expresiones regulares.
En lenguaje de programación, palabras clave, constantes, identificadores, cadenas, números, operadores y puntuaciones los símbolos pueden ser considerados como testigos.
Por ejemplo, en lenguaje C, la declaración de variable línea
int value = 100;
Contiene las fichas:
int (keyword), value (identifier), = (operator), 100 (constant) and ; (symbol).
Nos permiten comprender de qué modo la teoría del lenguaje se compromete los siguientes términos:
Cualquier conjunto finito de símbolos {0,1 } es un conjunto de caracteres binarios, {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F} es un conjunto de valores hexadecimales alfabetos, {a-z, A-Z} es un conjunto de idioma Inglés alfabetos.
Cualquier secuencia finita de alfabetos se llama una cadena. Longitud de la cadena es el número total de ocurrencia de los alfabetos, p. ej., la longitud de la cadena howcodex es 14 y se denota por |howcodex| = 14. Una cadena que no alfabetos, es decir, una cadena de longitud cero se conoce como una cadena vacía, y se denota por ε (épsilon).
EL típico lenguaje de alto nivel contiene los siguientes símbolos:
Símbolos aritméticos | Además (+), resta (-), módulo (%), Multiplication(*), división (/) |
Puntuación | Comas (,), punto y coma (;), punto (.), la flecha(->) |
Asignación | = |
Asignación especial | +=, /=, *=, -= |
Comparación | ==, !=, , >= |
Preprocesador | # |
Especificador de ubicación | & |
Lógico | &, &&, |, ||, ! |
Operador de turno | >>, >>>, < |
UN idioma es considerado como un conjunto finito de cadenas en algunos conjunto finito de los alfabetos. Lenguajes de programación son considerados como conjuntos finitos, y matemáticamente conjunto de operaciones que se pueden llevar a cabo en ellos. Lenguajes finitos se pueden describir por medio de expresiones regulares.
Cuando el analizador léxico leer el código fuente, explora el código letra por letra; y cuando se encuentra un espacio en blanco, símbolo de operador, o símbolos especiales, decide que una palabra se ha completado.
Por ejemplo:
int intvalue;
Mientras se realiza la exploración tanto lexema resultante- hasta 'int', el analizador léxico no puede determinar si se trata de una palabra clave int o las iniciales del identificador valor int.
La regla de coincidencia más larga que el capturado lexeme debe ser determinado sobre la base de la mayor coincidencia entre todas las fichas disponibles.
El analizador léxico también sigue prioridad de regla donde una palabra reservada, por ejemplo, una palabra clave, de un idioma se da prioridad a entrada de usuario. Es decir, si el analizador léxico encuentra un lexeme que coincide con cualquier palabra reservada, deberá generar un error.