next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: Práctica: Arbol de Análisis Sup: Árbol de Análisis Abstracto Ant: AAA: Otros tipos de Err: Si hallas una errata ...

Declaraciones

Los nodos del tipo declaration no existen propiamente, son nodos de la clase $ INT$ o de la clase $ STRING$ . La parte de la gramática árbol de la que hablamos es:

2 $ decls$ $ \rightarrow$ list $ decl$
4 $ decl$ $ \rightarrow INT(idlist)$
5 $ decl$ $ \rightarrow STRING(idlist)$
6 $ idlist$ $ \rightarrow$ list $ SIMPLEID$

Los nodos declaration son un hash con una clave TYPE la cual apunta a la estructura de datos/objeto describiendo el tipo. La otra clave del hash IDLIST apunta a una lista de identificadores. Los elementos de esta lista son simples identificadores (identificados en la gramática árbol anterior como $ SIMPLEID$ y no como objetos $ ID$ ). La parte de la gramática implicada en las declaraciones es:



declaration $ \rightarrow$ INT idlist $ \vert$ STRING idlist
idlist $ \rightarrow$ ID ',' idlist $ \vert$ ID


Así pues, el código construye un nodo de la clase INT o STRING según sea el caso.

sub declaration() {
  my ($t, $class, @il);

  if (($lookahead eq 'INT') or ($lookahead eq 'STRING')) {
    $class = $lookahead;
    $t = &type();
    @il = &idlist();
    return $class->new(TYPE => $t, IDLIST => \@il);
  }
  else {
    Error::fatal('Se esperaba un tipo');
  }
}
Observe la llamada $class->new(TYPE => $t, IDLIST => \@il) en la cual la clase se usa a través de una referencia simbólica.


next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: Práctica: Arbol de Análisis Sup: Árbol de Análisis Abstracto Ant: AAA: Otros tipos de Err: Si hallas una errata ...
Casiano Rodríguez León
2012-05-22