Cronograma:
Apresentação gerador de analisador léxico - <estudantes> > Flex, <estudantes>> JFlex, <estudantes>> PhytonLexIA : 09/09/2019
Gramática: 02/09/2019 (ver informações no tópico [1])
Apresentação gerador de analisador sintático: 24/09/2019
1ª VA: 08/10/2019 (prova escrita: 30% da nota, implementação do analisador léxico e sintático: 70% da nota)
2ª VA: 19/11/2019 (prova escrita: 30% da nota, fase de síntese: 70% da nota)
Assunto da prova: Análise Semântica, Fase de Síntese, Ambientes de Execução.
3ª VA: 03/12/2019 (prova escrita: 30% da nota, fase de síntese: 70% da nota)
Avaliação final: 16/12/2019
Ajuda:
http://www.dcc.ufrj.br/~fabiom/comp20112/
Apresentação sobre AMBIENTES DE EXECUÇÃO:
Estudante 1: Organização de memória, alocação de espaço na pilha;
Estudante 2: Acesso a dados não locais na pilha;
Estudante 3: Gerenciamento de heap;
Estudante 4: Introdução à coleta de lixo, introdução à coleta baseada em rastreamento;
Estudante 5: Coleta de lixo com pausa curta;
Estudante 6: Tópicos avançados sobre coleta de lixo (coleta de lixo paralela e concorrente; relocação parcial de objeto; coleta conservadora para linguagens inseguras; referências fracas).
Estudante 7: Assembler NASM (NetWide Assembler).
[1] Características da BNF/Gramática:
A gramática precisa ser LL(1).
Gramáticas LL(1) podem ser analisadas por um simples parser descentente recursivo e deve estar:
– Sem recursão a esquerda
– Fatorada a esquerda
– 1 símbolo de look-ahead
Além disso, a linguagem deve cobrir os seguintes aspectos:
1. Declaração de variáveis de tipo inteiro e booleano
2. Declaração de procedimentos e funções (sem e com parâmetros)
3. Comandos de atribuição
4. Chamada de procedimentos e funções
5. Comando de desvio condicional (if e else)
6. Comando de laço (while)
7. Comando de retorno de valor
8. Comandos de desvio incondicional (break e continue)
9. Comando de impressão de constante e variável na tela
10. Expressões aritméticas (+, -, * e /)
11. Expressões booleanas (==, !=, >, >=, < e <=)
_____
Exercício [1]: No gerador de analisador léxico, criar analisadores léxicos para:
I) Jlex e JAAC
1) Nros. de Telefones no Brasil
2) Placas de Carros Brasileiros
3) ISBN de um livro
II) Lex e Yacc
4) Endereços IP válidos
5) Prefixos de estações de rádio (e.g. 102.3 MHz)
6) Números romanos
III) Flex e Bison
7) Número de matrícula da UFRPE
8) Números reais (qualquer notação, incluindo científica)
9) Tags HTML (padrão)
IV) GALS
10) URL de páginas Web
11) Palavras da Língua Portuguesa
12) Strings de um programa em linguagem “C”
_____
Características semânticas solicitadas no compilador (esta lista ainda pode ser acrescentada de outros items):
1. Observar se já existe uma variável com o mesmo nome no mesmo escopo e informar que já foi criada. Assim também para as funções, a mesmo que haja sobrecarga;
2. Observar se a variável utilizada foi declarada naquele escopo ou no escopo geral;
3. Observar se as atribuições e operações matemáticas e lógicas são realizadas com operandos de mesmo tipo;
4. Observar o escopo das variáveis e funções;
5. Expressões aritméticas;
6. Comandos de atribuição;
7. Atribuição de funções;
8. Expressões relacionais (>, <, ...);
9. For (tipos do verificador);
10. If (expressão lógica);
11. While (expressão lógica);
12. Função (retorno de tipo, quantidade de parâmetros e tipos).
Links de apoio em relação às ferramentas geradoras de analisadores léxicos e sintáticos:
http://dinosaur.compilertools.net/
http://www.cin.ufpe.br/~if688/ferramentas.htm
Códigos-fonte dos programas que aparecem no livro Como Construir um Compilador - Utilizando Ferramentas Java (Márcio E. Delamaro):