• Entrada. Una cadena de entrada w y una tabla de relaciones de

Anuncio
ALGORITMO DE ANÁLISIS SINTÁCTICO POR PRECEDENCIA DE OPERADOR
• Entrada. Una cadena de entrada w y una tabla de relaciones de precedencia de
operador.
• Salida. Si w es sintácticamente correcta, se habrá construido en la pila
implícitamente su árbol de análisis (se habría podido construir explícitamente si se
hubiera necesitado); en caso contrario, la salida será una indicación de error
sintáctico.
• Método. Inicialmente la pila contiene el símbolo de fondo de pila, $, y el “buffer”
de entrada contiene la cadena y su delimitador, w$. El algoritmo de análisis es el
siguiente:
punt_ent apunta al primer símbolo de w$;
repeat
if el contenido de la pila es $S y punt_ent apunta a $
then return
(* aceptar *)
else
begin
sea a el símbolo terminal de cima de pila y b el apuntado por punt_ent;
if a<b o a=b
then begin
(* desplazar b *)
meter b en la pila;
avanzar punt_ent al siguiente símbolo de la entrada;
end;
else if a>b
(* reducir por S Æ α *)
then
repeat
(* sacar de la pila el consecuente de la regla *)
sacar el elemento de la cima de la pila
until el terminal de la cima de la pila esté relacionado por <
con el terminal más recientemente extraído;
sea α=ap...aj la cadena de elementos sacados de la pila, con ap
el más recientemente extraído, y sea S Æ α ∈ P;
meter S en la pila
else error ()
end
(* meter el antecedente *)
(* error *)
Descargar