AAA: Otros tipos de nodos

Hemos optado por que las rutinas asociadas a variables sintácticas que describen listas de subcategorías devuelvan las correspondientes listas de nodos. Teníamos tres variables tipo lista. Las reglas para las listas eran:



Gramática de los Árboles de Tutu Gramática del lenguaje Tutu
$ decls$ $ \rightarrow list decl$ declarations $ \rightarrow$ declaration ';' declarations $ \vert$ declaration ';'
$ sts$ $ \rightarrow list st$ statements $ \rightarrow$ statement ';' statements $ \vert$ statement
$ idlist$ $ \rightarrow list SIMPLEID$ idlist $ \rightarrow$ ID ',' idlist $ \vert$ ID

En este caso las subrutinas asociadas no devuelven objetos sino listas de objetos. Esto da lugar a una compactación del AAA. Veánse los códigos de statements y idlist:

sub statements() {
  my @s;

  @s = (statement());
  if ($lookahead eq ';') {
    match(';');
    push @s, statements();
  }
  return @s;
}

sub idlist() {
  my @id;

  if ($lookahead eq 'ID') {
    @id = ($value); # no es un objeto 
    match('ID');
    if ($lookahead eq ',') {
      match(',');
      push @id, idlist();
    }
  }
  else {
    Error::fatal('Se esperaba un identificador');
    @id = ('ERROR');
  }
  return @id;
}

Casiano Rodríguez León
2009-12-09