Ficha Nº8
Exercício Nº1
2008.05.27

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: