Compiladores

Solo disponible en BuenasTareas
  • Páginas : 2 (295 palabras )
  • Descarga(s) : 0
  • Publicado : 16 de febrero de 2012
Leer documento completo
Vista previa del texto
compiladores

Implantación de un diagrama de transiciones


Una secuencia de diagramas de transiciones se puede convertir en un programa que busque los componentes léxicos especificados por losdiagramas. Se adopta un enfoque sistemático que sirve para todos los diagramas de transiciones y que construye programas cuyo tamaño es proporcional al número de estados y de aristas de los diagramas.Para devolver los componentes léxicos se utiliza la variable global valor-léxico, a la que se asignan los apuntadores devueltos por las funciones instala_id() e instala_nüm() cuando se encuentraun identificador o un número, respectivamente.

Se devuelve la clase del componente léxico por el procedimiento principal del analizador léxico, llamado sigte_complex().

Las anstas de losdiagramas de transiciones se encuentran seleccionando repetidamente el fragmento de código para un estado y ejecutando ese fragmento de código para determinar el siguiente estado, como se indica en la figura3.16. Se muestran el código para el estado 0, tal como se modificó en el ejemplo 3.10 para considerar los espacios en blanco, y el código para dos de los diagramas de transiciones de las figuras 3.13y 3.14. Obsérvese que la construcción en C


while(l) prop


repite prop "indefinidamente", es decir, hasta que aparezca una instrucción re-turn.


int estado = 0, inicio = 0; intvalor_léxico;

/* para "devolver" el segundo componente del componente léxico */


int falloO

{

delantero = inicio_lexema;

switch (inicio) {

case 0: inicio = 9; break;

case 9: inicio = 12;break;

case 12: inicio - 20; break;

case 20: inicio = 25; break;

case 25: recupera(); break;

default: /* error del compilador */

!





complex sigte_complex()
{ while(l) {switch (estado) {

case 0: c = sigtecar();

/* c es el carácter de preanálisis */

if (c—blanco ¡ ¡ c»-tab ¡ f c=línea_nueva) ( estado ■ 0; inicio_lexema++;

/* se avanza el inicio...
tracking img