Lavanda
Lavanda é uma linaguagem de domínio específico (DSL) cujo objectivo é descrever o conteúdo
dos sacos de roupa suja que são recebidos num ponto de recepção e que depois os envia a
uma grande lavandaria para lavar (este documento será a ordem de lavagem).
Cada saco é identificado por um identificador numérico (id) e pelo nome de um
cliente (IdCli); o seu conteúdo é composto por um ou mais lotes. Cada Lote é um subconjunto de
sacos do mesmo tipo. O tipo é caracterizado por: uma classe (Classe: corpo ou casa); uma espécie
de tingido (tinto: br ou cor); e o material (Fio: alg, la ou fib). Para cada item é registado o
número de peças recebidas.
A GIC abaixo especifica a sintaxe da linguagem.
p1: Lavanda --> Cabec Sacos
p2: Cabec --> date IdPR
p3: Sacos --> Saco '.'
| Sacos Saco '.'
p5: Saco --> num IdCli Lotes
p6: Lotes --> Lote
| Lotes Lote
p8: Lote --> Tipo Qt
p9: Tipo --> Classe Tinto Fio
p10: IdPR --> id
p11: IdCli --> id
p12: Qt --> num
p13,14: Classe --> corpo | casa
p15,16: Tinto --> br | cor
p17,18,19: Fio --> alg | la | fib
Desenvolva então, cada uma das seguintes alíneas:
(a)Especifique um parser para a linguagem recorrendo às ferramentas lex e yacc.
(b)Como Acções Semânticas realize as seguintes computações:
- Não há dois sacos com o mesmo identificador nem com o mesmo nome de cliente;
- O número de sacos recebidos;
- O número de peças por cliente;
- O total de peças por tipo (há 12 tipos: de corpo/br/alg a casa/cor/fib).