Você está na página 1de 2

Centro Universitrio de Belo Horizonte Uni-BH Departamento de Cincias Exatas e Tecnologia Curso: Cincia da Computao Disciplina: Teoria da Computao

o e Linguagens Formais Professor: Moiss Henrique Ramos Pereira ________________________________________________________________________________

Trabalho Prtico II Implementao de Analisador Sinttico


Descrio do trabalho Durante sua funo de transformar cdigo fonte em cdigo objeto (executvel), um compilador deve, entre outras coisas, verificar se o programa fonte est sintaticamente correto. A etapa de verificao do sintaxe do programa chamada de anlise sinttica. A anlise sinttica feita com base em uma gramtica livre de contexto que define como os programas na linguagem de programao considerada devem ser gerados. Sendo assim, a anlise sinttica consiste, basicamente, em verificar se uma sequncia de tokens encontrados pelo analisador lxico podem ser gerados a partir da gramtica da linguagem. Os mtodos de anlise sinttica esto divididos em dois grandes tipos: mtodos top-down e bottomup. Os mtodos top-down partem do smbolo de partida da gramtica at produzirem a palavra (programa) em questo. Os mtodos bottom-up fazem o inverso; partem da palavra e tentam atingir o smbolo de partida. Os mtodos de anlise sinttica consideram, em geral, a leitura dos tokens da esquerda para a direita. Os mtodos bottom-up so mais poderosos que os mtodos top-down. No entanto, os do ltimo tipo so mais fceis de implementar do que os do primeiro tipo. O mtodo de anlise sinttica top-down mais conhecido o chamado LL(1) left-to-right leftmost derivation (ou seja, leitura da esquerda para a direita aplicando-se uma derivao mais esquerda). A implementao recursiva de um analisador sinttico LL(1) consiste em criar funes para cada varivel da gramtica. Uma funo para uma varivel X, que participe do conjunto de regras com a regra X w, deve invocar as funes de cada uma das variveis em w e deve verificar se os terminais esperados em w correspondem aos tokens obtidos no arquivo. Neste trabalho dever ser implementado um analisador sinttico para comandos de atribuio envolvendo expresses. A gramtica que descreve a sintaxe desses comandos a seguinte: Catrib Atrib ; Catrib | Atrib Atrib id = E EE+T | E-T | T TT*F | T/F | F F (E) | ID | nreal | nint | nstring Os operadores artimticos na gramtica correspondem aos lexemas de seus respectivos tokens. Observe que foram acrescentados os tokens ( , ) e ; e os operadores foram divididos em vrios tokens, um para cada tipo. O que fazer? Voc dever criar um analisador sinttico LL(1) que verifique a sintaxe de programas compostos por

comandos de atribuio. Voc poder atualizar e utilizar o analisador lxico implementado no primeiro trabalho para retornar os tokens para o seu analisador sinttico. Alm disso, antes de implementar o algoritmo, voc deve eliminar a recursividade esquerda da gramtica. Caso algum erro de sintaxe ocorra, o processo deve ser abortado e o programa deve informar em qual linha do arquivo o erro ocorreu e porqu. Por exemplo, ao verificar a sintaxe do programa 1 = a + 1, o analisador sinttico terminar sua execuo com a mensagem esperado identificador, encontrado constante inteira (linha 1). O trabalho poder ser implementado em Pascal, C/C++ ou Java. Implementaes noutras linguagens no sero aceitas. O que entregar? Voc dever entregar um relatrio descrevendo todo o seu trabalho. Nesse relatrio, voc dever explicar como alcanou a soluo do problema, dar exemplos de testes realizados, etc. Em anexo, voc dever fornecer um CD ou enviar um e-mail para moises.ramos@prof.unibh.br com a listagem dos cdigos-fonte e arquivos de teste. Consideraes gerais 1. O trabalho poder ser feito por grupos de at trs pessoas. 2. Bibliografia recomendada: AHO, Alfred V. ; SETHI, Ravi ; ULLMAN, Jeffrey D.; LAM, Monica S. Compiladores: Princpios, Tcnicas e Ferramentas . 2a ed. So Paulo: Pearson, 2007. LOUDEN, Kenneth C. Compiladores: princpios e prticas. Thomson, 2004. 3. Trabalhos copiados da internet ou de outros colegas sofrero sanes (perdas parcial ou total dos pontos do trabalho). 4. O trabalho vale 15 pontos. 5. A data de entrega do trabalho ser 30/11/12.