·

Ciência da Computação ·

Compiladores

Send your question to AI and receive an answer instantly

Ask Question

Preview text

Compilador fase 1 Análise léxica e sintática O objetivo desse trabalho é implementar um Compilador com as fases de análise léxica e sintática para uma linguagem baseada na linguagem Pascal mas com palavras reservadas em português ou seja a linguagem Portugol O Compilador para Portugol restringe a linguagem Pascal para ter apenas tipos inteiros e lógicos booleanos comandos condicionais se e repetição while também não temos a possibilidade de escrevermos funções e procedimentos nessa linguagem Na implementação do Compilador o analisador léxico deve atender as necessidade do analisador sintático A interação entre o analisador léxico e o analisador sintático se dará por meio da função consome do analisador sintático que realizará chamadas à função obteratomo do analisador léxico se a b inicio imprime a a 1 Fim TInfoAtomo consome Arquivo fonte Analisador Léxico char buffer obteratomo Analisador Sintático solicita átomo char lookahead Figura 1 Interação entre Analisador Léxico e Sintático Sintaxe da linguagem Portugol A sintaxe da linguagem Portugol está descrita na notação EBNF os nãoterminais da gramática são nomes entre parênteses angulares e e os símbolos terminais átomos do analisador léxico estão em negrito ou entre aspas Ex a notação denotará a repetição da cadeia uma ou mais vezes programa algoritmo identificador bloco bloco declaracaodevariaveis comandocomposto declaracaodevariaveis variavel listavariavel tipo listavariavel identificador identificador tipo inteiro logico comandocomposto inicio comando comando fim comando comandoatribuicao comandose comandoenquanto comandoentrada comandosaida comandocomposto comandoatribuicao identificador expressao comandose se expressao entao comando senao comando comandoenquanto enquanto expressao faca comando comandoentrada leia listavariavel comandosaida escreva expressao expressao expressao expressaosimples relacional expressaosimples relacional expressaosimples termo ou termo termo fator div e fator fator identificador numero verdadeiro falso expressao Especificação Léxica Caracteres Delimitadores Os caracteres delimitadores espaços em branco quebra de linhas tabulação e retorno de carro r deverão ser eliminados ignorados pelo analisador léxico mas o controle de linha contagem de linha deverá ser mantido Comentários dois tipos de comentário um começando com e indo até o final da linha 1 linha com o finalizador do comentário o caractere O outro começando com e terminando com várias linhas nesse comentário é importante que a contagem de linha seja mantida além disso os comentários são repassados para o analisador sintático para serem reportados e descartados Palavras reservadas As palavras reservadas na linguagem Portugol são strings em minúsculo algoritmo variavel inteiro logico inicio fim se entao enquanto faca leia escreva ou div e verdadeiro falso Importante Uma sugestão é que as palavras reservadas sejam reconhecidas na mesma função que reconhece os identificadores e deve ser retornado um átomo específico para palavra reservada Identificadores Os identificadores começam com uma letra minúscula ou maiúscula seguido de zero ou mais letras minúsculas eou maiúsculas dígitos ou caractere underline limitados a 15 caracteres Caso seja encontrado um identificador com mais de 15 caracteres deve ser retornado ERRO pelo analisador léxico A seguir a definição regular para identificadores letra abzABZ digito 019 identificador letraletradigito Números No compilador teremos somente números inteiros com seguinte definição regular abaixo exponencial Eeλdigito numero digitoexponencialλ Execução do Compilador No Compilador quando for detectado um erro sintático ou léxico o analisador devese emitir uma mensagem de erro explicativa e terminar a execução do programa A mensagem explicativa deve informar a linha do erro o tipo do erro léxico ou sintático e caso seja um erro sintático devese informar a linha do erro e qual era o átomo esperado e qual foi o átomo encontrado pelo Compilador por exemplo para o programa exemplo1 Entrada compilador 1 2 3 4 5 algorimo exemplo1 variavel maiorinteiro inicio escrevamaior fim Saída do compilador 4 Erro sintático esperado inicio encontrado end A seguir temos um outro programa em Portugal que lê uma dois números e encontra o maior o programa a seguir está correto léxico e sintático 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 programa le dois numeros inteiros e encontra o maior algorimo exemplo2 variavel maiorn1n2inteiro inicio leian1 leian2 se n1 n2 então maior n1 senao maior n2 escrevamaior imprime o maior valor fim O para cada átomo reconhecido o compilador imprime as seguintes informações baseado nas informações contidas na estrutura TInfoAtomo e ao final informa que a análise terminou com sucesso Saída do compilador 1comentario 5algoritmo 5identificador atributoexemplo2 5ponto e virgula 6variavel 6identificador atributomaior 6virgula 6identificador atributon1 16 linhas analisadas programa sintaticamente correto Observações importantes O programa deve estar bem documentado e pode ser feito em grupo de até 2 alunos não esqueçam de colocar o nome dos integrantes do grupo no arquivo fonte do trabalho e sigam as Orientações para Desenvolvimento de Trabalhos Práticos disponível no Moodle 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ão significativos e desorganizado sem indentação sem comentários também serão penalizados