FichasEG10 - Education/EL1011 - TWiki
Education » EL1011 » WebHome » FichasEG10
Engenharia de Linguagens (2010/11)
Para apoio a um projecto de Genealogia pretende-se que crie uma linguagem simples que permita descrever Famílias. Cada Família será formada pela identificação dos Progenitores (nome próprio e apelido, separados) e pela lista dos filhos (apenas nome próprio).
Em fases posteriores pretende-se que a sua linguagem permita distinguir entre os Progenitores, a Mãe e o Pai, e depois a Data do casamento (para que o registo genealógico possa também suportar um projecto de investigação em Demografia Histórica).
b) Transforme a GIC numa Gramática Tradutora (GT) para calcular o número de filhos por casal, apresentando esse valor emparelhado com a data do casamento.
c) Transforme a GIC numa Gramática Tradutora (GT) para gerar instruções SQL que carreguem para a Tabela "Pessoas" de uma base de dados a informação de cada membro do agregado familiar: Chave, NomeProprio, Apelido, Género (se conhecido); Note que a Chave deve ser gerada pelo seu Processador e que o Apelido dos Filhos deve ser inferido também por esse Processador a partir dos Apelidos dos Progenitores.
d) Reescreva as GTs anteriores mas agora usando Gramáticas de Atributos (GA).
Considere a linguagem de programação Lisp na qual um programa é uma Symbolic-Expression (SExp). Sabe-se que uma SExp é um valor atómico (palavra ou numero) ou é uma lista e que cada elemento da lista é uma SExp.
A GIC abaixo define formalmente a linguagem Lisp, de acordo com a descrição acima:
T = { num, pal, "(", ")" }
N = { Lisp, SExp, SExplist }
S = Lisp
p1: Lisp     --> SExp
p2: SExp     --> num
p3: SExp     --> pal
p4: SExp     --> "(" SExplist ")"
p5: SExplist --> SExp SExplist
p6: SExplist --> &
a) calcular o nível de aninhamento de cada lista (comece em 1 para a lista principal).
b) construir uma lista com todos os "operadores" presentes (considera-se "operador" o 1ºelemento de cada lista).
c) verificar se todos os "operadores" usados pertencem ao conjunto de operadores válidos de acordo com uma "biblioteca" fornecida no inicio.
d) verificar se o numero de argumentos ("operandos") com que cada operador é invocado condiz com a cardinalidade associada aos operadores válidos na referida "biblioteca".
e) substituir todos os "identificadores" usados como operandos pelo valor que lhes é associado nas operações "let".
f) gerar código post-fix para o programa ser executado por uma máquina-de-stack (que primeiro carrega os "operandos" e depois os transforma pelos "operadores", substituindo-os pelo resultado).
Questões colocadas nas aulas
(2010-10-18) ...
Fichas Práticas para Avaliação (a resolver fora das aulas)
F1 (2010-11-08): Concluir as alíneas a) b) c) d) do Exercico 2 e entregar devidamente documentado.
F2 (2010-12-06): Resolva o Exemplo 3 devidamente documentado para efeitos de avaliação.
F3 (2011-02-21): Resolva o Exemplo da Calculadora com declarações devidamente documentado para efeitos de avaliação.
F4 (2011-03-01): Resolva o Exercício do LogoLISS devidamente documentado para efeitos de avaliação
F5 (2011-03-21): Faça um estudo sobre métricas e avaliação de qualidade em linguagens de Modelação / Especificação.
Notas e Links úteis
(2011-04-04) Monografias feitas pelos grupos de trabalho sobre Qualidade e Métricas:
(2010-11-08) Novas Scripts (funcionam em sistemas Unix) para agilizar a compilação em Silver:
O primeiro script, parse, deve ser colocado na directoria da gramática e permite testar o compilador correspondente a essa gramática com um ou vários ficheiros de input; para executar usar o seguinte comando: parse input1 [input2 ...]
O segundo, cpgr, deve ser colocado na pasta grammars e duplica uma gramática para outra pasta garantindo a compilação; para executar usar o seguinte comando: cpgr pastaOrigem pastaDestino