12
Linguagens de Programação
MACKENZIE
3
Linguagens de Programação
MACKENZIE
4
Linguagens de Programação
MACKENZIE
3
Linguagens de Programação
MACKENZIE
2
Linguagens de Programação
MACKENZIE
4
Linguagens de Programação
MACKENZIE
5
Linguagens de Programação
MACKENZIE
16
Linguagens de Programação
MACKENZIE
3
Linguagens de Programação
MACKENZIE
2
Linguagens de Programação
MACKENZIE
Texto de pré-visualização
A maior aplicação das gramáticas livres de contexto ocorre na formalização sintática das linguagens de programação de alto nível A característica que torna as gramáticas livres de contexto especialmente adequadas à formalização sintática das linguagens de programação é a sua capacidade de representação de construções aninhadas que são freqüentemente encontradas em linguagens dessa categoria As construções aninhadas costumam ocorrer em linguagens de programação por exemplo na construção de expressões aritméticas em que subexpressões são delimitadas através do uso de parênteses Para exemplificar isto considere uma pequena gramática escrita na notação BNF BackusNaur Form para definição de variáveis comandos de atribuição com expressões aritméticas programa declarações comando declarações declaração declaração declarações declaração int variavel comandos comandos atribuição atribuição atribuição variavel expr expr expr termo expr termo termo termo termo termo termo fator termo fator fator fator numero expr variável letra variável letra numero digito número digito letra a b c d e f g h i j k l m n o p q r s t u v w x y z digito 0 1 2 3 4 5 6 7 8 9 Considere que o símbolo inicial da gramática é programa e os nãoterminais são nomes entre parênteses angulares e e os símbolos terminais estão em negrito Objetivo O objetivo do trabalho é implementar um Reconhecedor para gramática acima para tanto a gramática não pode ter recursividade à esquerda e deve estar fatorada assim você deve rescrever as produções eliminando a recursividade à esquerda para que seja possível implementar o reconhecedor ou seja reescrever a gramática para notação EBNF BNF estendida A entrada do Reconhecedor será realizada por um arquivo texto com um trecho de código seguindo a gramática acima como por exemplo Reconhecedor de gramáticas Um exemplo de código em arquivo pode ser visto abaixo Note que a entrada pode constar comentários de uma linha e caracteres de delimitadores espaços em branco quebra de linhas tabulação e retorno de carro que devem ser desconsiderados na análise A saída do reconhecedor será na tela do computador e dever informar se foi possível derivar a sentença para gramática do trabalho e a quantidade de linhas do arquivo processada por exemplo para o exemplo acima teremos a seguinte saída Se a entrada não estiver sintaticamente correta ou seja caso não seja possível derivar a sentença a partir da gramática como no exemplo abaixo Deve ser apresentada uma mensagem informando a linha em que ocorreu o erro por exemplo para a entrada acima temo Observações importantes O trabalho será avaliado de acordo com os seguintes critérios Funcionamento do programa caso programa apresentarem warning ao serem compilados serão penalizados Após a execução o programa deve finalizar com retorno igual a 0 O trabalho deve ser desenvolvido na linguagem C e será testado usando o compilador do CodeBlocks 1712 O quão fiel é o programa quanto à descrição do enunciado principalmente ao formato de do arquivo de entrada Clareza e organização programas com código confuso linhas longas variáveis com nomes nãosignificativos e desorganizado sem indentação sem comentários também serão penalizados Falha na derivacao Erro na linha 4 int x int soma x23 aqui eh um comentário mas tem um erro na expressao soma 38 Entrada aceita sem erros 4 linhas analisadas int x int soma x 2 3 aqui eh um comentario soma 38 programa declarações comando declarações declaração declaração declarações declaração int variavel comandos atribuição comandos atribuição atribuição variavel expr expr termo expr termo expr termo termo termo termo fator termo fator termo fator fator numero expr variavel letra variavel letra numero digito numero digito letra a b c d e f g h i j k l m n o p q r s t u v w x y z digito 0 1 2 3 4 5 6 7 8 9 programa declarações comando declarações declaração declaração declarações declaração int variavel comandos atribuição comandos atribuição atribuição variavel expr expr termo expr termo expr termo termo termo termo fator termo fator termo fator fator numero expr variavel letra variavel letra numero digito numero digito letra a b c d e f g h i j k l m n o p q r s t u v w x y z digito 0 1 2 3 4 5 6 7 8 9
12
Linguagens de Programação
MACKENZIE
3
Linguagens de Programação
MACKENZIE
4
Linguagens de Programação
MACKENZIE
3
Linguagens de Programação
MACKENZIE
2
Linguagens de Programação
MACKENZIE
4
Linguagens de Programação
MACKENZIE
5
Linguagens de Programação
MACKENZIE
16
Linguagens de Programação
MACKENZIE
3
Linguagens de Programação
MACKENZIE
2
Linguagens de Programação
MACKENZIE
Texto de pré-visualização
A maior aplicação das gramáticas livres de contexto ocorre na formalização sintática das linguagens de programação de alto nível A característica que torna as gramáticas livres de contexto especialmente adequadas à formalização sintática das linguagens de programação é a sua capacidade de representação de construções aninhadas que são freqüentemente encontradas em linguagens dessa categoria As construções aninhadas costumam ocorrer em linguagens de programação por exemplo na construção de expressões aritméticas em que subexpressões são delimitadas através do uso de parênteses Para exemplificar isto considere uma pequena gramática escrita na notação BNF BackusNaur Form para definição de variáveis comandos de atribuição com expressões aritméticas programa declarações comando declarações declaração declaração declarações declaração int variavel comandos comandos atribuição atribuição atribuição variavel expr expr expr termo expr termo termo termo termo termo termo fator termo fator fator fator numero expr variável letra variável letra numero digito número digito letra a b c d e f g h i j k l m n o p q r s t u v w x y z digito 0 1 2 3 4 5 6 7 8 9 Considere que o símbolo inicial da gramática é programa e os nãoterminais são nomes entre parênteses angulares e e os símbolos terminais estão em negrito Objetivo O objetivo do trabalho é implementar um Reconhecedor para gramática acima para tanto a gramática não pode ter recursividade à esquerda e deve estar fatorada assim você deve rescrever as produções eliminando a recursividade à esquerda para que seja possível implementar o reconhecedor ou seja reescrever a gramática para notação EBNF BNF estendida A entrada do Reconhecedor será realizada por um arquivo texto com um trecho de código seguindo a gramática acima como por exemplo Reconhecedor de gramáticas Um exemplo de código em arquivo pode ser visto abaixo Note que a entrada pode constar comentários de uma linha e caracteres de delimitadores espaços em branco quebra de linhas tabulação e retorno de carro que devem ser desconsiderados na análise A saída do reconhecedor será na tela do computador e dever informar se foi possível derivar a sentença para gramática do trabalho e a quantidade de linhas do arquivo processada por exemplo para o exemplo acima teremos a seguinte saída Se a entrada não estiver sintaticamente correta ou seja caso não seja possível derivar a sentença a partir da gramática como no exemplo abaixo Deve ser apresentada uma mensagem informando a linha em que ocorreu o erro por exemplo para a entrada acima temo Observações importantes O trabalho será avaliado de acordo com os seguintes critérios Funcionamento do programa caso programa apresentarem warning ao serem compilados serão penalizados Após a execução o programa deve finalizar com retorno igual a 0 O trabalho deve ser desenvolvido na linguagem C e será testado usando o compilador do CodeBlocks 1712 O quão fiel é o programa quanto à descrição do enunciado principalmente ao formato de do arquivo de entrada Clareza e organização programas com código confuso linhas longas variáveis com nomes nãosignificativos e desorganizado sem indentação sem comentários também serão penalizados Falha na derivacao Erro na linha 4 int x int soma x23 aqui eh um comentário mas tem um erro na expressao soma 38 Entrada aceita sem erros 4 linhas analisadas int x int soma x 2 3 aqui eh um comentario soma 38 programa declarações comando declarações declaração declaração declarações declaração int variavel comandos atribuição comandos atribuição atribuição variavel expr expr termo expr termo expr termo termo termo termo fator termo fator termo fator fator numero expr variavel letra variavel letra numero digito numero digito letra a b c d e f g h i j k l m n o p q r s t u v w x y z digito 0 1 2 3 4 5 6 7 8 9 programa declarações comando declarações declaração declaração declarações declaração int variavel comandos atribuição comandos atribuição atribuição variavel expr expr termo expr termo expr termo termo termo termo fator termo fator termo fator fator numero expr variavel letra variavel letra numero digito numero digito letra a b c d e f g h i j k l m n o p q r s t u v w x y z digito 0 1 2 3 4 5 6 7 8 9