Vous êtes sur la page 1sur 45

Universidade Federal do Acre - UFAC

Disciplina: Fundamento Computacional Prof.: Haroldo

Analisador Lxico X Linguagem Regular


Discentes: Willan Gutierrez
Ronan Vasconcelos Mrio Lima Rebeca Cunha Ithalo Vasconcelos

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

Fases de um compilador (II)


Programa fonte Anlise lxica Anlise sinttica Gerenciador da tabela de smbolos Anlise semntica Gerador de cdigo intermed. Otimizador de cdigo Gerador de cdigo Programa destino Tratamento de erros

Ferramentas Complementares a um Compilador


Vrios componentes fazem parte do processo de compilao: preprocessador, compilador, assembler, carregador e/ou link-editor.

Programa fonte preprocessador Programa fonte compilador assembler

Cdigo objeto (relocvel) Carregador/ link-editor Cdigo executvel Bibliotecas/ cdigos objeto

Programa em assembler

As Fases de Anlise

Registra os identificadores e respectivas informaes

As Fases de Sntese

Trata os erros encontrados em cada fase do compilador


Fases de um Compilador

Compiladores, Filtros e Pr-processadores

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.

Relacionamento dos compiladores com outros elementos de um sistema de programao


HARDWARE Linguagem de mquina Sistema Operacional

Montadores Ling. de baixo nvel

Compiladores/interpretadores Ling. de alto nvel

Ling. para resoluo de problemas especficos

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 )

Exemplos de Compiladores: 1. Turbo Pascal 2. Turbo C

Filtro
Caso a ling.-objeto seja de alto nvel e muito semelhante a ling.-fonte, o tradutor recebe o nome de filtro.

Texto-Fonte (em Turbo C)

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)

Formalizao das Linguagens de Programao.


As linguagens de programao devem ser descritas de maneira completa e isenta de ambigidades. Para tanto utilizam-se notaes matemticas formais, inspiradas em modelos elaborados por estudiosos de Linguagens naturais, entretanto menos complexas e cheias de restries em sua forma, visando limitar sua generalidade e aumentar sua simplicidade para facilitar a elaborao de programas analisadores baseados em tais definies. Exemplo de linguagens Naturais?

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.

Pontos relevantes no Projeto de um Compilador


Velocidade possvel vantagem para um passo Espao possvel vantagem para um passo (dados x programa) Modularidade vantagem de mltiplos passos Flexibilidade vantagem de mltiplos passos Transformaes/otimizaes de programas vantagem de mltiplos passos Caractersticas da linguagem fonte podem inviabilizar o uso de um passo nico se a linguagem permite o uso de uma funo antes da sua definio, por exemplo.

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.

Padres, tokens e lexemas?


Lexema: sequencia de caracteres que casam com o padro de um token. Uma instncia de um token. Padro: descrio da forma dos lexemas que um token pode ter. Tokens: par com o nome do token e atributos opcionais.
Lexemas Exemplo if <, <=, =, >, >= pi, contador, varSoma 3.1416, 0, 6.02E23 string qualquer Descrio informal do padro if < ou <= ou = ou > ou >= Letra seguida por letras ou dgitos Qualquer constante numrica Quaisquer caracteres entre aspas, exceto aspas

Token if

relao id num string

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

Especificao dos Tokens


Cadeias e Linguagens Operaes em Linguagens Expresses Regulares

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

Linguagem: denota qualquer conjunto de cadeias sobre algum alfabeto fixo


y , {}, conjunto de todos os programas Pascal e sentenas sintaticamente corretas do portugus

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.

Operaes em Linguagens - exemplos


L U D
Conjunto de letras e dgitos.

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 *

Diagrama de transio para >=

Tcnica para reconhecimento de Palavras-Chaves


letra ou dgito
estado de partida letra 9 10 outro * 11 retornar(obter-token(), instalar-id())

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

Gerador de Analisadores Lxicos


Auxiliam na construo de analisadores Lxicos Utilizam expresses regulares para descrever tokens Permite a combinao da identificao de padres com execuo de aes Compilador e linguagem Lex Ex:

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

Gerador de Analisadores Lxicos


Um programa lex constitudo de 3 partes:
y %{ declaraes }%
Contm declaraes de variveis , includes e constantes Cdigo nesta seo diretamente copiado para cdigo na linguagem alvo

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

Gerador de Analisadores Lxicos


Programa fonte Lex

Compilador Lex Compilador C Analisador Lxico

Cdigo C lex.yy.c

lex.yy.c

Fluxo de caractes de entrada

Sequncia de tokens identificados

Algoritmo do analisador lxico


caracter

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

Obrigado pela ateno!

Vous aimerez peut-être aussi