HomeUpConteúdos

Primeira fase
Primeira faseSegunda faseTerceira fase
 



 
 

Esta fase será constituída por várias etapas. No fim, o resultado será um processador genérico de documentos estruturados (XML) que validará a boa formação dos documentos e que guardará a sua informação num grove.

As duas primeiras etapas serão constituídas pelo trabalho das duas primeiras semanas de aulas.

Etapa 1 (de 28.02 a 07.03)


Construir um analisador léxico e um analisador sintáctico usando o par de ferramentas lex+yacc para a gramática que se apresenta a seguir.

Documento --> ElemList '$'

ElemList --> ElemList Elem
| Elem

Elem  --> char

            | '&' id ';'

            | '<' id AttrList '>' ElemList '<' '/' id '>'

            | '<' id AttrList '/' '>' 

AttrList  --> Attr AttrList

            | &

Attr       --> id '=' valor
 


No fim o programa deverá indicar que conseguiu reconhecer com sucesso um documento estruturado.


Etapa 2 (de 08.03 a 14.03)


Acrescentar ao analisador construído na etapa anterior a análise semântica que faça as seguintes validações:
  1. todas as anotações correspondentes a elementos com conteúdo são abertas e fechadas correctamente.
  2. o documento tem que obrigatoriamente começar com a abertura dum elemento (que irá englobar todo o documento):
<doc>
     ...
</doc>
Sugestão: alterar a gramática...

 

Etapa 3 (de 20.03 a 10.04)


Armazenamento da Informação (discutida nas aulas de 20 e 21 de Março:
  • criar um grove e armazenar a informação do documento nessa estrutura.
  • criar uma função de travessia que será invocada a seguir ao yyparse() e gerará um documento no formato ESIS.
  • Estrutura de dados definida em C numa das últimas aulas (é apenas uma proposta):
typedef struct Anodo

  { char* nome;

    char* valor;

    struct Anodo* seg;

  } atributo;
typedef struct Gnodo
  { char* id;
    union C
    { char* texto;                            /* para nodos _texto */
      struct X                                  /* para os outros nodos */
      { struct Gnodo* conteudo;
        atributo* atribs;
      } normal;
    } cont;
    struct Gnodo* irmaos;
 } grove;

/* num programa ou numa função ... */

grove *g;
...
...g->cont.texto... /* para aceder ao conteudo textual dum nodo texto */
...g->cont.normal.conteudo... /* para aceder ao primeiro nodo do conteúdo dum nodo normal */

Aceitam-se comentários e/ou sugestões...
14 de Abril de 2000: Submissão do 1º relatório
 
 
Para questões relacionadas com este website contactar:  jcr@di.uminho.pt 
Última modificação: Fevereiro 29, 2000