Académique Documents
Professionnel Documents
Culture Documents
Objetivos
Nesta apresentao iremos falar sobre as principais fases do processo de um compilador. Com nfase no Analisador Lxico.
Especificao/Implementao de L.P. Uso geral: novas, extenses e atualizaes Especfico: Tempo Real, robtica, descrio de HW, SO, BD, Protocolos, Interfaces Uso de tcnicas/ferramentas em outros sistemas Processamento de texto, ling. naturais Entender melhor as Ling. Prog. Escolha e uso mais racional/eficiente Estudos avanados Pesquisa e ps-graduao
Compiladores?
Fases de um compilador
Programa fonte Relato de erros Anlise sinttica AST Anlise contextual AST Decorada Gerao de cdigo Programa objeto Relato de erros
Cdigo objeto (relocvel) Carregador/ link-editor Cdigo executvel Bibliotecas/ cdigos objeto
Programa em assembler
As Fases de Anlise
As Fases de Sntese
Nos computadores antigos os compiladores muitas vezes exerciam o seu papel como programas autnomos, exigindo uma interao direta com o programador com operaes especficas e manuais transformando o programa em formas intermedirias produzidas em meios de armazenamento externo (fitas ou cartes perfuradas).
O cdigo-objeto final, que tambm apresentava-se na forma de fitas e cartes, continha programas-objeto em linguagem de mquina relocvel, ou em formato fonte de linguagem simblica de baixo nvel. A partir da, e atravs de processamento adicional, chegava-se a um programa executvel (ainda na forma de fitas ou cartes).
Atualmente os compiladores operam integrados aos demais componentes do sistema de programao, fazendo parte do conjunto dos recursos oferecidos pelo sistema operacional.
Definies
COMPILADOR: um dos mdulos do software de um computador, cuja funo a de efetuar automaticamente a traduo de textos, redigidos em uma determinada linguagem de programao, para alguma outra forma que viabilize sua execuo (em geral em linguagem de mquina) TRADUTOR: Texto-Fonte (redigido em ling. fonte) Tradutor Texto-Objeto (redigido em ling. objeto)
Tradutores em que a ling. fonte de baixo nvel, por tradio, chamam-se montadores (assembly languages)
Compilador
Generalizando: tradutores convertem textos redigidos em uma linguagem, para formas equivalentes, redigidas em outra linguagem. Se a primeira linguagem for de alto nvel, o tradutor ser chamado compilador. Texto-Fonte (Ling.alto nvel) Compilador Texto-Objeto (outra Linguagem )
Filtro
Caso a ling.-objeto seja de alto nvel e muito semelhante a ling.-fonte, o tradutor recebe o nome de filtro.
Filtro
Texto-Objeto (equivalente em C)
Exemplos?
Pr-Processador
Programas que efetuem tradues entre 2 dialetos de mesma linguagem, ou que permitem converter para uma forma padronizada um texto que inclua extenses de uma Linguagem disponvel, chamam-se pr-processadores. Texto-Fonte (no preparado) Prprocessador Texto-Fonte equivalente (preparado)
Gramticas
O ideal seria conversarmos diretamente com computador, mas por enquanto isto no economicamente vivel. As Linguagens de programao podem ser formalizadas da seguinte maneira: 1. Gramtica: Conjunto de leis de formao que definem rigorosamente o modo de formar textos corretos em uma linguagem. Portanto a linguagem o conjunto de todos os textos gerados a partir das definies da gramtica que a define. Gramticas so portanto dispositivos geradores (sntese) de textos pertencentes a linguagem.
Anlise Lxica
O que Lxico?
o repertrio total de palavras existentes em uma determinada lingua. Dicionrio Houaiss
Introduo
O analisador lxico (scanner) a parte do compilador responsvel por ler caracteres do programa fonte e transform-los em uma representao conveniente para o analisador sinttico. O analisador lxico l o programa fonte caractere a caractere, agrupando os caracteres lidos para formar os smbolos bsicos (tokens) da linguagem
y identificadores, palavras-chaves, operadores, parntesis e sinais de pontuao.
Token if
Introduo
Vantagens da diviso em anlise lxica e sinttica: Projeto mais simples. Diminui a complexidade do analisador sinttico que no precisa mais lidar com estruturas foras de seu escopo como tratamento de caracteres vazios. Melhorar a eficincia do compilador. Tcnicas de otimizao especficas para o analisador lxico. Melhor portabilidade. Particularidades da linguagem fonte podem ser tratadas diretamente pelo analisador lxico.
Cenrio
Envia token Program a fonte Analisador lxico Analisador sinttico Solicita novo token
Tabela de smbolos
Cadeias e Linguagens
Alfabeto ou classe de caracteres: qualquer conjunto finito de smbolos. Cadeia, sentena ou palavra: nome dada a uma seqncia finita de smbolos retiradas de uma alfabeto
y Ex: banana, 010101000001 y O comprimento de um palavra, denotado por |s|, corresponde ao nmero de smbolos requeridos para sua construo y Alfabeto binrio {0,1} y EBCDIC e ASCII
Operaes em Linguagens
Prefixo: cadeia obtida pela remoo de zero ou mais smbolos no fim da cadeia. Ex: ban um prefixo de banana. Sufixo: cadeia obtida pela remoo de zero ou mais smbolos no inicio da cadeia. Ex: nana um sufixo de banana. Subcadeia: cadeia obtida pela remoo de um prefixo e de um sufixo. Ex: nan. Subseqncia: cadeia formada pela remoo de smbolos, no necessariamente contguos. Ex: baaa uma subseqncia de banana. Unio: qualquer cadeia pertencente a um dos dois conjuntos. L U M = { s|s est em L ou s est em M} sendo L e M linguagens duas qualquer.
Operaes em Linguagens
Concatenao: LM = {st|s est em L e t est em M} Fechamento Kleene (L*): zero ou mais concatenaes de L. Fechamento positivo (L+): uma ou mais concatenaes de L.
LD
Conjunto de cadeias formadas por uma letra seguida por um dgito. Ex: a1
L4
Conjunto de cadeias formadas por 4 letras. Ex: abcd Conjunto de cadeias formadas por zero ou mais letras. Ex: a, ab, bb, bbc, ...
L* L (L U D)*
Conjunto de todas as cadeias de letras e dgitos que comecem com uma letra
D+
Conjunto de todas as cadeias de um ou mais dgitos
Linguagens Regulares
Gerada a partir de uma gramtica regular. Pode ser representada atravs de uma expresso regular. Pode ser reconhecida por um Autmato Finito. Considerando linguagens compostas por smbolos 0 e 1 podemos afirmar: a linguagem L01 ={0n1n| n u 1} no regular; a linguagem L01 ={0n1m | n u 1, m u 1} regular;
Expresses regulares
Notao especial para definio de cadeias de uma linguagem Identificador Pascall
y y y y y letra (letra|dgito)* Caractere | igual a ou * significa zero ou mais instncias A justaposio de letras significa concatenao destas Ex:
a|b (a|b)(a|b) a* (a|b)*
{a,b} {aa, ab, ba, bb} { , a, aa, aaa, ...}
Se duas expresses regulares denotam a mesma linguagem, dizemos que so equivalentes e representamos r=s. Ex: (a|b) = (b|a)
Expresses Regulares
Definies regulares
Expresses regulares podem ser nomeadas e estes nomes podem ser utilizados para definio de novas expresses Ex: letra : A|B|...|Z|a|b|...|z digito : 0|1|...|9 id : letra(letra|digito)*
Reconhecimento de Tokens
if if then then else else relop <|<=|=|<>|>|>=| id letra (letra|dgito)* num dgito+ (.dgito + )?(E(+|-)?dgito +)? delim branco|tabulao|avano de linha ws delim +
Diagramas de Transies
Utilizado para determinar a seqncia de aes executadas pelo analisador lxico no processo de reconhecimento de um token As posies no diagrama so representadas atravs de um crculo e so chamadas de estado Os estados so conectados por setas, denominadas lados Os lados so rotulados com caracteres que indicam as possveis entrada que podem aparecer aps o diagrama de estado ter atingido um dado estado O rtulo outro se refere a qualquer caractere de entrada que no seja o indicado pelos demais rtulos que deixam o estado Um crculo duplo determina um estado de aceitao
estado de partida
>
= out ro
8 7 *
Obter-token() procura o lexema na tabela de smbolos se o lexema for uma palavra-chave o token correspondente retornado, caso contrrio, retornado id Instalar-id() procura lexema na tabela de smbolos se o lexema for uma palavra-chave retornado zero, caso contrrio, retornado um ponteiro para a tabela de smbolos se o lexema no for encontrado ele instalado como uma varivel e retornado um apontador para entrada recm criada
Em geral pode haver mais de um diagrama de transies. Quando ocorre o erro no reconhecimento utilizando um diagrama o reconhecimento do token reinicializado utilizando outro diagrama O lexema para um dado token deve ser o mais longo possvel. Ex: 12.3E4 Sempre que possvel deve-se procurar primeiramente pelos tokens de maior incidncia. Ex: espao em branco
y Flex verso GNU do lex para C. http://www.monmouth.com/~wstreett/lex-yacc/lex-yacc.html y Jlex verso Java com pequena diferena na sintaxe de entrada. http://www.cs.princeton.edu/~appel/modern/java/JLex/ y CSLex verso C#, derivada do Jlex.
http://www.cybercom.net/~zbrad/DotNet/Lex
y %% regras de tradues %%
y Procedimentos auxiliares
Difinies regulares Formato p1 {ao} Utilizadas como ... .... componentes de expresses pn {ao} onde, pi uma expresso regular eregulares que aparecem nas cada ao um fragmento de programa descrevendo a ao a ser tomada quando o de tradues regras padro for reconhecido
Contm procedimentos auxiliares que seja necessrio para execuo das aes. Cdigo nesta seo diretamente copiado para cdigo na linguagem alvo
Cdigo C lex.yy.c
lex.yy.c
Links de Apoio
Manuais do Lex e do Yacc http://www.bumblebeesoftware.com/ Analisadores lxicos e sintticos http://www.inf.ufes.br/~tavares/labcomp2000/ Apostilas http://www-di.inf.puc-rio.br/~rangel/comp.html Exemplo de analisador lexico http://www.hpjanio.hpg.ig.com.br/compiladores.htm
Referncias Bibliogrficas
O contedo desta apresentao no esgota o assunto, maiores informaes podero ser obtidas em:
Compilers Principles, Techniques and Tools. AddisonWesley Publishing Co. 1986. Compiladores, Teoria e Pratica. Ed. LTC. Allen I. Holub, Compiler Design in C. Prentice Hall Inc. 1990. Introduo a Compilao. Maria G. V. Nunes, Alessandra A. Macedo, Daniel G. Dosualdo e Tatiana Barbosa. Http://www.icmsc.sc.usp.br/Ensino