next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: Ejercicio Sup: Recursión por la Izquierda Ant: Ejercicio Err: Si hallas una errata ...

Convirtiendo el Esquema en un Analizador Predictivo

A partir del esquema propuesto, que se basa en una fase de descenso con un atributo heredado y una de ascenso con un atributo sintetizado:



$ expr \rightarrow NUM$ { $r{H} = $NUM{VAL} } $ r$ { $expr{T} = $r{T} }
$ r \rightarrow - NUM$ { $r_1{H} = $r{H}." ".$NUM{VAL}." - " } $ r_1$ { $r{T} = $r_1{T} }
$ r \rightarrow \epsilon$ { $r{T} = $r{H} }

es posible construir un APDR que ejecuta las acciones semánticas en los puntos indicados por el esquema de traducción. El atributo heredado se convierte en un parámetro de entrada a la subrutina asociada con la variable sintáctica:

sub expression() {
  my $r = $value." "; #accion intermedia
  match('NUM'); 
  return rest($r); # accion final $expr{T} = $r{T}
}

sub rest($) {
  my $v = shift;

  if ($lookahead eq '-') {
    match('-');
    my $r = "$v $value -"; # accion intermedia
    match('NUM');
    return rest($r); # accion final $r{t} = $r_1{t}
  }
  elsif ($lookahead ne 'EOI') {
    error("Se esperaba un operador");
  }
  else { return $v; } # r -> epsilon { $r{t} = $r{h} }
}


next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: Ejercicio Sup: Recursión por la Izquierda Ant: Ejercicio Err: Si hallas una errata ...
Casiano Rodríguez León
2013-03-05