Ficha Nº5
Exercício Nº4
2008.04.08

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 programa em C para consumir os terminais reconhecidos pelo Analisador Léxico.