El diagrama de transición es un tipo especial de diagrama de flujo para el análisis del lenguaje. En el diagrama de transición, las cajas del diagrama de flujo se dibujan como un círculo y se denominan estados. Los estados están conectados por flechas llamadas aristas. La etiqueta o peso en el borde indica el carácter de entrada que puede aparecer después de ese estado.
El diagrama de transición del identificador se muestra a continuación:
Este diagrama de transición para el identificador que lee la primera letra y después de esa letra o dígito hasta que el siguiente carácter de entrada es el delimitador del identificador, significa el carácter que no es ni letra ni dígito. Para convertir el diagrama de transición en un programa, construimos el código de segmento de programa para cada estado del diagrama de transición.
El código de segmento de programa para cada estado se proporciona a continuación:
Estado-0:
C=GETCHAR(); if LETTER(C) then goto State 1 else FAIL()
Estado-1:
C=GETCHAR(); if LETTER(C) OR DIGIT(C) then goto State 1 else if DELIMITER(C) then goto State 2 else FAIL()
Estado-2:
RETRACT(); RETURN(ID, INSTALL())
Donde,
Siguiente carácter para el búfer de entrada, usamos GETCHAR() que devuelve el siguiente carácter.
LETRA(C) es un procedimiento que devuelve el valor verdadero si y solo si C es una letra.
FAIL(C) es una rutina que RETRAE el puntero de anticipación e inicia el siguiente diagrama de transición; de lo contrario, llama a la rutina de error.
DIGIT(C) es un procedimiento que devuelve el valor verdadero si y solo si C es un dígito.
DELIMITER(C) es un procedimiento que devuelve el valor verdadero si y solo si C es un carácter que podría seguir al identificador, por ejemplo, símbolo en blanco, aritmético, operador lógico, paréntesis izquierdo, paréntesis derecho, +, :, ; etc.
Debido a que DELIMITER no es parte del identificador, por lo tanto, debemos RETRAER el puntero de anticipación un carácter, para este propósito usamos el procedimiento RETRACT() .
Debido a que el identificador tiene un valor, para instalar el valor del identificador en la tabla de símbolos, usamos el procedimiento INSTALL() .