Ficha Nº7
Exercício Nº1
2008.04.29

A Agenda de Contactos


Pretende-se criar uma agenda para gerir contactos de pessoas e empresas.

Uma agenda deste tipo é essencialmente constituída por uma lista de entradas.

Uma entrada pode ser simples, correspondendo a uma pessoa ou empresa, ou pode ser composta, neste caso corresponde a uma lista de pessoas e/ou empresas.

A agenda poderá conter um número livre de grupos aninhados.

Um grupo poderá ainda conter referências a entradas definidas noutros pontos da agenda.

Cada entrada é constituída pelos seguintes items de informação:

Nas alíneas que se seguem considere que uma frase concreta desta linguagem tem a seguinte forma:
    <AGENDA>
      <ENTRADA id="e1" tipo="pessoa">
        <NOME>José Carlos Ramalho</NOME>
        <EMAIL>jcr@di.uminho.pt</EMAIL>
        <TELEFONE>253 604479</TELEFONE>
      </ENTRADA>
      <GRUPO gid="epl">
        <ENTRADA id="e2" tipo="pessoa">
          <NOME>Pedro Henriques</NOME>
          <EMAIL>prh@di.uminho.pt</EMAIL>
          <TELEFONE>253 604469</TELEFONE>
        </ENTRADA>
        <REFERENCIA refent="e1"/>
        <ENTRADA id="e3" tipo="pessoa">
          <NOME>João Saraiva</NOME>
          <EMAIL>jas@di.uminho.pt</EMAIL>
          <TELEFONE>253 604479</TELEFONE>
        </ENTRADA>
      </GRUPO>
      <ENTRADA id="e4" tipo="empresa">
        <NOME>Lavandaria Tudo Branco</NOME>
        <TELEFONE>253 604433</TELEFONE>
      </ENTRADA>
    </AGENDA>

Desenvolva então, cada uma das seguintes alíneas:

(a)Especifique uma GIC para a linguagem com a qual se pode descrever agendas.

(b)Crie um Analisador Léxico usando o flex para os terminais da linguagem que especificou.

(c)Crie um Analisador Sintáctico usando o yacc.

(d)Defina um módulo em C para uma representação semântica e acrescente ao parser as acções necessárias para a sua construção; pode usar o seguinte módulo desenvolvido em PI como base para a sua implementação: ficheiro de interface, ficheiro da implementação.