Upload
others
View
6
Download
0
Embed Size (px)
Citation preview
Aula Prática 3Geração de linguagens livres do
contexto usando gramáticas.
Objectivos
• Desenhar gramáticas livres de contexto (GLC) para descrever linguagens livres de contexto a partir de uma descrição informal dos mesmos.
Bibliografía
• Técnicas de Compilación: Manual Práctico para estudiantes de informática, L. Acevedo, K. Osorio.
• Autómatas y Lenguajes, R. Brena.
• Teoría de autómatas, lenguajes y computa-ción, J. E. Hopcroft, R. Motwani, J. D Ullman.
Trabalho Independente
Defina uma gramática livre de contexto para a linguagemque permite a declaração de protótipos de funções. Aestrutura de uma declaração de função deve ser:
<tipo_dado> <nomeie_função>(<parâmetros>)
O tipo de dados é INT, STRING ou BOOL. Os parâmetrosdevem ser instruções separadas por vírgula da forma<tipo dado><nomeie> e a menor quantidade deparâmetros passados é 1.
Trabalho Independente
Exemplo de funções:
INT mayorNumero(INT numero1, INT numero2)
BOOL esPar(INT numero1)
Exerciso 1
Construa gramáticas livres de contexto para cada um das seguintes linguagens:
1. Palavras sobre o alfabeto binário que começam com 1.
Ej: 101, 10010, 1111, 110101
2. Palavras do alfabeto {a, b} que cumprem com a restrição anbn | n = 1.
Ej: ab, aabb, aaabbb
Exerciso 2
Construa gramáticas livres de contexto para cada um das seguintes linguagens:
1. Palavras sobre o alfabeto {a, b} em que aspalavras têm a mesma quantidade da que do B.
Ej: abab, ababba, aaabbbbbbaaa
2. Linguagem dos parêntese bem balançados.
Ej: (()), ()(), (()())()
Exercíso 3
Desenhe uma gramática para representar somas devetores numéricos. Um vetor numérico se representacomo uma lista de números inteiros separados porcoma e encerrados entre colchetes. A soma mínimacontém 2 vetores e a quantidade mínima denúmeros em um vetor é de dois números inteiros.
Exemplo de somas de vetores numéricos:
[10, 5] + [4, 2] + [1, 7]
[10, 5, 7] + [3, 4, 2] + [1, 7, 6] + [3, 7, 11]
Exerciso 4
Desenhe a gramática associada a uma linguagempara descrever o manejo de contêineres pelas gruasde um porto. A estrutura de um programadesenvolvido nesta linguagem é a seguinte:
main
{
<instrucciones>
}
Exerciso 4
O bloco de <instruções> está formado por váriasinstruções separadas por um ponto e vírgula.
Cada instrução pode ser de tipo declaração, criação,mover ou tirar
Exerciso 4
Declaração
grua nomeie _1, nomeie _2, …, nomeie _n
contêiner nomeie _1, nomeie _2, …, nomeie _n
onde nomeie é um identificador.
Exerciso 4
Criaçãocriar_grua <variável> <num1> <num2>onde <variável> é o identificador de uma grua e <num1>e <num2> a posição da grua dentro do porto.
criar_contêiner <variável> <num1> <num2>onde <variável> é o identificador do contêiner e <num1>e <num2> a posição do contêiner dentro do porto.grua nomeie _1, nomeie _2, …, nomeie _ncontêiner nomeie _1, nomeie _2, …, nomeie _nonde nomeie é um identificador.
Exerciso 4
Mover
mover <variável> <num1> <num2>
onde é o identificador de uma grúa e e a posiçãopara onde mover-se-á.
Tirar
tirar <variável>
onde é o identificador de um contêiner. Faz que agrúa mais próxima ao contêiner chegue até ele e odestrua.
Exerciso 4
Exemplo de programa:
main
{grua g1, g2;contenedor c1;crear_grua g1 2 2;crear_contenedor c1 5 5;mover g1 4 4;crear_grua g2 3 3;quitar c1;
}
Exerciso 5
Construir una gramática que permita representar un pequeño lenguaje de programación. Un programa en dicho lenguaje tendría la siguiente forma.
PROGRAM <identificador>;
<declaración de variables>;
BEGIN
<instrucciones>
END.
Exerciso 5
<declaração de variáveis>: pode ser uma declaração ou uma sequência de declarações separadas por ’;’.
A declaração é um <tipo> seguido por umasequência de <identificadores> que seriam os nomesdas variáveis, separados por ’,’. Os tipos podem serINTEGER ou STRING.
Exerciso 5
<instrucciones>:
• puede ser asignación, que sería de la forma <variable> := <literal entero> o
<variable> := <variable> + <variable>
• PRINT <variable>
Todas las instrucciones están separadas por ’;’.
Conclusiones
• As gramáticas livres de contexto se podem utilizarpara definir as linguagens livres de contexto comoas linguagens de programação.
• Para desenhar gramáticas livres de contexto nãoexiste uma metodologia, solo existem patrões ougramáticas gerais que se podem utilizar para definirgramáticas mais complexas.