Você está na página 1de 56

Universidade de Santa Cruz do Sul UNISC

Departamento de informtica

COMPILADORES

Anlise lxica
Parte 01

Geovane Griesang
geovanegriesang@unisc.br
Compilador
Compilador

... um programa de computador que l um programa escrito em uma


linguagem (linguagem fonte) e a traduz em um programa equivalente em
outra linguagem (linguagem objeto).
Aho, Sethi, Ullman.

Funo: relatar quaisquer erros no programa fonte detectados durante


este processo de traduo.

Portanto:
Cria representaes intermedirias do programa
Verifica presena de certos tipos de erros

Geovane Griesang 2
Compilador
Compilador

Nesse processo de traduo, h 2 tarefas bsicas a serem executadas


por um compilador:

Anlise (front-end), em que o texto de entrada (na ling. fonte)


examinado, verificado e compreendido.
- Anlise lxica, sinttica e semntica.

Sntese (back-end), ou gerao de cdigo, em que o texto de


sada (na linguagem objeto) gerado, de forma a corresponder ao
texto de entrada.

Geovane Griesang 3
Compilador - fases
Anlise
Cdigo fonte Analisador lxico
Analisador lxico

Analisador sinttico

Analisador semntico

Gerador tabela Tradutor de


de smbolos Gerador de cdigo erros
intermedirio

Otimizador de cdigo

Gerador de cdigo Cdigo alvo


Sntase

Geovane Griesang 4
Anlise lxica

2. Anlise Lxica:

2.1 especificao de analisadores lxicos;

2.2 implementao de analisadores lxicos;

2.3 geradores de analisadores lxicos;

2.4 tabela de smbolos;

Geovane Griesang 5
Anlise lxica
Funcionalidade dos analisadores lxicos

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 p/ formar os smbolos bsicos (tokens) da linguagem
(identificadores, palavras-chaves, operadores, parntesis e sinais de
pontuao) e passar esta informao para o parser (analisador sinttico).

Geovane Griesang 6
Anlise lxica
Resumo

Funo simplificada do analisador lxico: organizar os caracteres e os


agrupar em smbolos (tokens).

Entrada: Fluxo de caracteres.

Sada: Fluxo de smbolos.

Smbolos: Palavras reservadas, identificadores de variveis e/ou


procedimentos, operadores, pontuao, ...

Geovane Griesang 7
Anlise lxica
Resumo

Exemplo: montante := saldo + taxa_de_juros * 30;

So identificados os seguintes tokens:


Identificador montante
Smbolo de atribuio :=
Identificador saldo
Smbolo de adio +
Identificador taxa_de_juros
Smbolo de multiplicao *
Nmero 30

Geovane Griesang 8
Anlise lxica
Resumo

<identificador, 1>,
<:=>,
<identificador, 2>,
<+>,
<identificador, 3>,
<*>,
<nmero, 30>
Nome Tipo
1 montante -
Tabela de smbolos 2 Saldo -
3 Taxa_de_juros -

Geovane Griesang 9
Anlise lxica
Cenrio interaes entre os analisadores lxico e sinttico

Envia Token P/ anlise


Programa Analisador Analisador semntica
fonte lxico sinttico
Solicita
novo Token

Tabela de
smbolos

Geovane Griesang 10
Anlise lxica
Cenrio interaes entre os analisadores lxico e sinttico

No geral, a iterao implementada fazendo-se com que o analisador


sinttico (AS) chame o analisador lxico (AL).

A chamada, sugerida pelo comando getNextToken (solicita novo token),


faz com que o analisador leia caracteres de uma entrada at que ele
possa identificar o prximo lexema e produza para ele o prximo token,
que retorna ao analisador sinttico.
Envia Token P/ anlise
Programa Analisador Analisador semntica
fonte lxico sinttico
Solicita
novo Token

Tabela de
smbolos

Geovane Griesang 11
Anlise lxica
Vantagens da diviso em anlise lxica (AL) e sinttica (AS):

Projeto mais simples: diminui a complexidade do analisador sinttico que


no precisa mais lidar com estruturas foras de seu escopo, como por
exemplo, tratamento de caracteres vazios. Portanto, um AS que tivesse
que lidar com comentrios e espao em branco como unidades sintticas
seria muito mais complexo (talvez, a mais importante).

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.

Geovane Griesang 12
Anlise lxica
Tokens, padres e lexemas

Tokens: so padres de caracteres com um significado especfico em um


cdigo fonte.

Um token um par consistindo em um valor e atributo opcional.

O nome do token um smbolo abstrato que representa um tipo de


unidade lxica, por exemplo, uma palavra chave em particular, ou uma
sequencia de caracteres da entrada denotando um identificador.

Nomes de tokens so os smbolos da entrada que o analisador sinttico


processa.

Geovane Griesang 13
Anlise lxica
Tokens, padres e lexemas

Lexemas: so ocorrncias de um token em um cdigo fonte, tambm so


chamados de tomos.

Um lexema uma sequencia de caracteres no programa fonte que casa


com o padro para um token e identificado pelo analisador lxico como
uma instncia desse token.

Lexemas podem ter atributos como nmero da linha em que se encontra


no cdigo fonte e o valor de uma constante numrica ou um literal.

Normalmente utiliza-se um nico atributo que um apontador para a


Tabela de Smbolos que armazena essas informaes em registros.

Geovane Griesang 14
Anlise lxica
Tokens, padres e lexemas

Um mesmo token pode ser produzido por vrias cadeias de entradas.

O conjunto de cadeias descrito por uma regra denominada padro, que


est associada a tais tokens.

O padro reconhece as cadeias de tal conjunto, ou seja, reconhece os


lexemas que so padro de um token.

No caso de uma palavra-chave, o padro s uma sequencia de


caracteres que formam uma palavra-chave. Para identificadores e
outros tokens, o padro uma estrutura complexa, que casada
por muitas sequencias de caracteres.

Geovane Griesang 15
Anlise lxica
Tokens, padres e lexemas

Como o analisador lxico a parte do compilador que l o texto fonte, ele


pode realizar outras tarefas alm da identificao de lexemas, como:

Remover comentrios
Tratar espaos em branco (espao, quebra de linha, tabulao, ...)
Contar as linhas de um programa
Contar a quantidade de caracteres de um arquivo

Portanto:
Na leitura do arquivo de entrada varre este eliminando comentrios e
caracteres indesejveis

Geovane Griesang 16
Anlise lxica
Tokens, padres e lexemas

Usualmente os padres so convenes determinadas pela linguagem


para formao de classes de tokens:

identificadores: letra seguida por letras ou dgitos.


literal: cadeias de caracteres delimitadas por aspas.
num: qualquer constante numrica.

Geovane Griesang 17
Anlise lxica
Tokens, padres e lexemas

Token Descrio informal Ex. de Lexemas


if caracteres i, f If
else caracteres e, l, s, e else
comparison < or > ou <= ou >= ou == ou != <=, !=
id letra seguida por letras e dgitos pi, score, D2
number qualquer constante numrica 3.14159, 0, 6.02e23
literal qualquer caractere diferente de , cercado core dumped
por s

printf(Total = %d\n, score);

Tanto printf quanto score so lexemas casando com o padro p/ o token id,
e Total = %d\n, um lexema casando com o literal.

Geovane Griesang 18
Anlise lxica
Tokens, padres e lexemas

Os tokens usualmente so conhecidos pelo seu lexema e atributos


adicionais e podem ser entregues ao parser (AS) como tuplas na forma:

<a, b, ..., n>

Assim, a entrada a = b + 3, poderia gerar as tuplas:

<id, a> <=, > <id, b> <+, > <num, 3>

Observao: alguns tokens no necessitam atributos adicionais.

Geovane Griesang 19
Anlise lxica
Tokens, padres e lexemas Exemplo

Texto de entrada:
if (x >= y) then
y = 42;

Cadeia de tokens reconhecida:

IF / LPAREN / ID(x) / GEQ / ID(y) / RPAREN / THEN

ID(y) / ASSIGN / INT(42) / SCOLON

Geovane Griesang 20
Anlise lxica
Tokens, padres e lexemas

Outra tarefa do analisador lxico correlacionar as mensagens de erro


geradas pelo compilador com o programa fonte.

Exemplo: o analisador lxico pode registrar o nmero de caracteres de


quebra de linha, de modo que possa associar um dado nmero a cada
mensagem de erro.

Em alguns compiladores, o analisador lxico faz uma cpia do programa


fonte com as mensagens de erro inseridas nas posies apropriadas.

Com isso, pode-se saber qual linha est com erro.

Geovane Griesang 21
Anlise lxica
Erros lxicos

difcil um analisador lxico saber, sem auxlio de outros componentes,


que existe um erro no cdigo fonte.

Por exemplo, se a cadeia de caracteres fi for encontrada pela primeira vez


em um programa C no contexto: fi (a == f(x)) ...

Um analisador lxico no tem como saber se fi a palavra-chave if escrita


errada ou um identificador de funo no declarada.

Como fi um lexema vlido para o token id, o analisador lxico precisa


retornar o token id ao analisador sinttico e deixar que alguma fase do
compilador trate o erro provavelmente, o analisador sinttico.

Geovane Griesang 22
Anlise lxica
Erros lxicos

Existem estratgias de recuperao para tentar corrigir erros:


Remover um caractere da entrada restante. aif if
Inserir um caractere que falta na entrada restante. f if
Substituir um caractere por outro caractere. of if
Transpor dois caracteres adjacentes. fi if

Transformaes como essas podem ser experimentadas em uma tentativa


de reparar a entrada. Inclusive, essas estratgias fazem sentido, pois a
maior parte dos erros lxicos envolve um caractere.

Deve-se analisar se tais estratgias compensam o esforo da correo.

Geovane Griesang 23
Anlise lxica
Buffers de entrada

Buffers: A simples tarefa de ler o programa fonte pode ser acelerada.

Leitura: essa tarefa se torna difcil pelo fato de c/ frequncia precisarmos


examinar um ou mais caracteres alm do prximo lexema para nos
certificarmos de ter o lexema correto.

Geovane Griesang 24
Anlise lxica
Buffers de entrada Pares de bufferes

Devido a quantidade de tempo necessria para processar caracteres e o


grande nmero de caracteres que precisam ser processados durante a
compilao de um programa fonte grande, foram desenvolvidas tcnicas
especializadas de buffering p/ reduzir o custo exigido no processamento
de um nico caractere de entrada.

Um esquema envolve dois bufferes que so recarregados alternadamente.

E = M * C * * eof

forward

lexemeBegin

Geovane Griesang 25
E = M * C * * eof

Anlise lxica forward

Buffers de entrada Pares de bufferes lexemeBegin

Cada buffer possui o mesmo tamanho N, e N normalmente corresponde


ao tamanho de um bloco de disco, por exemplo, 4096 bytes.

Usando um comando de leitura do sistema, podemos ler N caracteres p/


um buffer, em vez de fazer uma chamada do sistema para cada caractere.

Se restarem menos de N caracteres no arquivo de entrada, ento um


caractere especial, representado por eof, marca o fim do arquivo fonte e
diferente de qualquer caractere possvel do programa fonte.

Geovane Griesang 26
E = M * C * * eof

Anlise lxica forward

Buffers de entrada Pares de bufferes lexemeBegin

So mantidos dois apontadores para a entrada:


1. O apontador lexemeBegin marca o incio do lexema corrente, cuja
extenso estamos tentando determinar.
2. O forward l adiante, at que haja um casamento de padro.

Uma vez que o prximo lexema determinado, forward configurado p/


apontar para o ltimo caractere direita.

Em seguida, aps o lexema ser registrado como um valor de atributo de


um token retornado ao analisador sinttico, lexemeBegin configurado p/
apontar para o caractere imediatamente aps o lexema recm encontrado.

Geovane Griesang 27
Anlise lxica
Buffers de entrada Pares de bufferes

E = M * C * * eof

forward

lexemeBegin

Vemos que o apontador forward passou do fim do prximo lexema,


* * (o operador de exponenciao - Fortran), e precisa ser rotulado
em uma posio esquerda.

Geovane Griesang 28
E = M * C * * eof

Anlise lxica forward

Buffers de entrada Pares de bufferes lexemeBegin

Avanar o apontador forward exige que primeiro testemos se chegamos


ao fim de um dos bufferes e, neste caso, precisamos recarregar o outro
buffer da entrada e mover o apontador forward para o incio do buffer
recm carregado.

Se nunca precisarmos examinar to adiante do lexema corrente que a


soma do tamanho do lexema com a distncia que examinamos adiante
maior que N, nunca sobrescreveremos o lexema no buffer antes de
determin-lo.

Geovane Griesang 29
E = M * C * * eof

Anlise lxica forward

Buffers de entrada Pares de bufferes lexemeBegin

Podemos esgotar o espao de um buffer?

Na maioria das linguagens so modernas, os lexemas so pequenos, e


um ou dois caracteres de lookahead so suficientes.

Um buffer de tamanho N na casa de milhes suficiente, e o esquema


duplo visto anteriormente funciona sem problemas.

Existem, porm, alguns riscos. Por exemplo, se as cadeias de caracteres


puderem ser muito grandes, estendendo-se por muitas linhas, talvez nos
deparemos com a possibilidade de um lexema ser maior que N.

Geovane Griesang 30
E = M * C * * eof

Anlise lxica forward

Buffers de entrada Pares de bufferes lexemeBegin

Podemos esgotar o espao de um buffer?

Para evitar problemas com cadeias de caracteres longas, podemos trat-


las com uma concatenao de componentes, um de cada linha na qual a
cadeira de caracteres escrita.

Exemplo, Java adota a conveno de representar cadeias de caracteres


longas escrevendo uma parte em cada linha e concatenando-as com um
operador + ao final de cada parte.

Geovane Griesang 31
Anlise lxica
Especificao de tokens

Tokens podem ser especificados atravs de Expresses Regulares (ER)

Um alfabeto determina o conjunto de caracteres vlidos para a


formao de cadeias, sentenas ou palavras, ou seja, qualquer
conjunto finito de smbolos.

Cadeias so sequncias finitas de caracteres.

Linguagens: qualquer conjunto de algum alfabeto fixo. Definio


ampla, incluem linguagens abstratas como , o conjunto vazio {},
ou {}.

Geovane Griesang 32
Anlise lxica
Especificao de tokens - Operaes sobre linguagens

Algumas operaes podem ser aplicadas a alfabetos para auxiliar na


definio de cadeias. As mais importantes so: unio, concatenao e
fechamento.
Ex. de concatenao: se x = mal e y = tratar, ento xy = maltratar

Fechamento: O fecho (Kleene) de uma linguagem L, indicado por L*, o


conjunto de cadeias obtidas concatenando L zero ou mais vezes.

L0, a concatenao de L zero vezes definida como {}, e, Li Li-1L


L+ o fechamento positivo, mesmo que L0, mas sem o , ao menos que
seja o prprio L.

Geovane Griesang 33
Anlise lxica
Especificao de tokens - Operaes sobre linguagens

Operao Cadeia
Unio de L e M L U M = {s | s est em L ou s est em M}
Concatenao de L e M LM = {st | s est em L e t est em M}

=0
Fecho Kleene de L L* =

Exemplo: L o conjunto de letras {A, B, ..., Z, a, b, ..., z} e D o conjunto de


dgitos {0, 1, ..., 9}.

Geovane Griesang 34
Unio de L e M

Anlise lxica Concatenao de L e M


Fecho Kleene de L

Especificao de tokens - Operaes sobre linguagens

Algumas outras linguagens que podem ser constitudas das linguagens L


e D, usando os operadores da tabela apresentada anteriormente.
L = {A, B, ..., Z, a, b, ..., z} e D = {0, 1, ..., 9}.

1. L U D: o conjunto de letras e dgitos.


2. LD: Conj. de cadeias de tamanho 2, letra seguida de dgito.
3. L4: Conj. de todas as cadeias de quatro letras.
4. L*: Conj. de todas as cadeias, inclusive a cadeia vazia .
5. L(L U D)*: Conj. das cadeias de letras e dgitos, iniciando com letras.
6. D+: Conj. De todas as cadeias com um ou mais dgitos.

Geovane Griesang 35
Anlise lxica
Especificao de tokens - Expresses Regulares (ER)

Quais os tokens que podem ser reconhecidos em uma linguagem de


programao como C?

palavras reservadas: if else while do


identificadores
operadores relacionais: < > <= >= == !=
operadores aritmticos: + * / -
operadores lgicos: && || & | !
operador de atribuio: =
delimitadores: ; ,
caracteres especiais: ( ) [ ] { }

Geovane Griesang 36
Anlise lxica
Especificao de tokens - Expresses Regulares (ER)

Exerccio/exemplo: Descrever o conjunto de identificadores vlidos em C.

letra_ = {a, ..., z, A, ..., Z, _ }


dgito = {0, ..., 9}

Um identificador em C deve iniciar com uma letra ou o underline (_).


Em seguida, pode ter nmeros, underline e/ou letras, ou ainda, encerrar
com um identificador de tamanho 1.

letra_ ( Letra_ | dgito ) *

Geovane Griesang 37
Anlise lxica
Especificao de tokens - Expresses Regulares (ER)

ERs so construdas recursivamente a partir de ERs menores, usando as


regras de definio de ER.

As regras para definir expresses regulares sobre um alfabeto () e as


linguagens que essas expresses denotam so:

1. a expresso regular para a cadeia vazia, ou seja, L() {}.

2. Se a um smbolo pertencente a , ento a uma expresso


regular e, L(a) = {a}.

Geovane Griesang 38
Anlise lxica
Especificao de tokens - Expresses Regulares (ER)

Existem quatro partes na induo, por meio das quais ERs maiores so
construdas a partir de ERs menores. Suponhamos que r e s sejam ERs
denotando as linguagens L(r) e L(s), respectivamente.

1. (r)|(s) uma ER denotando a linguagem L(r) U L(s).

2. (r)(s) uma ER denotando a linguagem L(r)L(s).

3. (r)* uma ER denotando (L(r))*.

4. (r) uma ER denotando L(r) ou (L(r)).

Geovane Griesang 39
Anlise lxica
Especificao de tokens - Expresses Regulares (ER)

As ERs normalmente contm pares de parnteses desnecessrios. Pode-


se retirar pares de parnteses se algumas convenes forem adotadas.

a) operador unrio * possui precedncia mais alta e associativo


esquerda.

b) A concatenao possui a 2 maior precedncia, e associativa


esquerda.

c) | possui a precedncia mais baixa, e associativa esquerda.

Geovane Griesang 40
Anlise lxica
Especificao de tokens - Expresses Regulares (ER)

As ERs normalmente contm pares de parnteses desnecessrios. Pode-


se retirar pares de parnteses se algumas convenes forem adotadas.

Exemplo, subtituir (a)|((b)*(c)) por a|b*c

Conjunto de cadeias que so um nico a ou so zero ou mais b seguido


por um c.

Geovane Griesang 41
Anlise lxica
Especificao de tokens - Expresses Regulares (ER)

Exemplo: Considere = {a, b}.

1. a ER a|b denota a linguagem {a, b}

2. (a|b)(a|b) denota {aa, ab, ba, bb}, a linguagem de todas as


cadeias de tamanho dois sob o alfabeto .
Outra ER para mesma linguagem poderia ser: aa|ab|ba|bb

3. a* denota todas as cadeias de zero ou mais as: {, a, aa, ...}

Geovane Griesang 42
Anlise lxica
Especificao de tokens - Expresses Regulares (ER)

Exemplo: Considere = {a, b}.

4. (a|b)* denota todas as cadeias de zero ou mais instncias de as


e bs: {, a, b, aa, ab, ba, bb, aaa, ...}
Outra ER para mesma linguagem (a*b*)*

5. a|a*b denota a linguagem {a, b, ab, aab, aaab}

Geovane Griesang 43
Anlise lxica
Especificao de tokens - Expresses Regulares (ER)

Uma linguagem que pode ser definida por uma ER um conjunto regular.

Se duas ER r e s denotarem o mesmo conjunto regular, pode-se dizer que


so equivalentes e pode ser escrito assim: r = s.

Exemplo: (a | b) = (b | a)

Geovane Griesang 44
Anlise lxica
Especificao de tokens - Expresses Regulares (ER)

Leis algbricas para expressar ER:

Lei Descrio
r|s = s|r | comutativo
r|(s|t) = (r|s)|t | associativo
r(st) = (rs)t A concatenao associativa
r(s|t) = rs|st; (s|t)r = sr|tr A concatenao distribui entre |
r = r = r o elemento identidade para concatenao
r* = (r|)* garantido em um fechamento
r** = r* * igual a potncia

Geovane Griesang 45
Anlise lxica
Especificao de tokens Definies regulares

Por convenincia de notao, podemos dar nome a certas ERs e usar


esses nomes em expresses subsequentes, como se os nomes fossem
os prprios smbolos.

Ex. 1: Os identificadores de C so cadeias de letras, dgitos e sublinhados.

letter_ A | B | ... | Z | a | b | ... | z | _


digit 0 | 1 | ... | 9
id letter_ (letter_ | _digit) *

Ex. 2: digits digit digit*

Geovane Griesang 46
Anlise lxica
Especificao de tokens Definies regulares

Ex. 3: optionalFraction . digits |


optionalExponent (E (+ | - | ) digits ) | E
number digits optionalFraction optionalExponent

Uma optionalFraction um ponto decimal seguido por um ou mais dgitos


ou no existe (a cadeia vazia).

Um optionalExponent, se no estiver faltando, a letra E seguida por um


sinal de + ou opcional, seguido por um ou mais dgitos.

Geovane Griesang 47
Anlise lxica
Especificao de tokens Extenses de expresses regulares

1. Uma ou mais instncias. O operador unrio ps-fixado + representa o


fechamento positivo de um ER e sua linguagem.

Ou seja, se r uma ER, ento (r)+ denota a linguagem (L(r))+. O


operador + tem a mesma precedncia e associatividade do
operador *.

Duas leis algbricas teis: r* = r+| e r+ = rr* = r*r, se relacionado


ao fecho e ao fecho positivo de Kleene, respectivamente.

Geovane Griesang 48
Anlise lxica
Especificao de tokens Extenses de expresses regulares

2. Zero ou uma instncia. O operador unrio ps-fixado ?.

Ou seja, se r? equivalente a r|, de outra maneira, L(r?)=L(r)U{}.


O operador ? tem a mesma precedncia e associatividade dos
operadores * e +.

3. Classes de caracteres: uma ER a1|a2|...|ni, onde os ais so cada um


dos smbolos do alfabeto, pode ser substituda pela abreviao [a1a2...an].

Importante: quando a1,a2,...,an for uma sequencia lgica, pode-se


substituir por a1-an. Assim, [abc] abreviatura de a|b|c, e [a-z]
abreviatura de a|b|...|z.

Geovane Griesang 49
Anlise lxica
Especificao de tokens Extenses de expresses regulares

Exemplo de classes de caracteres


letter_ [A-Za-z_]
digit [0-9]
id letter_ (letter_ | digit)*

optionalFraction . digits |
optionalExponent (E (+ | - | ) digits ) | E
number digits optionalFraction optionalExponent
digit [0-9]
digits digit+
number digits (. digits)? (E [+-]? Digits)?

Geovane Griesang 50
Anlise lxica
x o caractere x
x o caractere x, mesmo que este seja um meta-caractere
. todos os caracteres exceto /n (newline)
[xyz] x, y ou z
[x-z] todos os caracteres entre x e z (classe)
[^x-z] todos os caracteres, exceto os entre x e z
r* a expresso regular r, zero ou mais vezes
r+ r, uma ou mais vezes
r? r opcional
r{n} r n vezes
r{n,} r n ou mais vezes
r{n,m} r n a m vezes
{name} a expresso da definio referente a nome

Geovane Griesang 51
Anlise lxica
\x se x igual a a, b, f, n, r, t, ou v, ento tem-se a interpretao
ANSI-C, caso contrrio d-nos o caractere x (necessrio para se
poder aceder aos meta-caracteres)
\0 o caractere nulo (NUL, cdigo ASCII 0)
\123 o caractere com valor octal 123
\x2a o caractere com valor hexadecimal 2
(r) a expresso regular r, necessrio para contornar as regras de
precedncia, ver mais abaixo
rs concatenao de expresses regulares r e s
r|s r ou s
r/s r, mas s se for seguido de um s
^r r no princpio de uma linha
r$ r no fim de uma linha
<s>r r, mas s num condio inicial

Geovane Griesang 52
Anlise lxica
Exerccios:

Descreva as linguagens denotadas pelas seguintes ER:

a) a(a|b)*a. L = {aa, aaa, aba, aaaa, aaba, abaa, abba, ...}

b) ((|a)b*)* L = {, a, b, aa, bb, ba, ab, aab, abb, ...}

c) (a|b)*a(a|b)(a|b) L = {}

d) (aa|bb)*((ab|ba)(aa|bb)*(ab|ba)(aa|bb)*)*
L={}

Geovane Griesang 53
Anlise lxica
Exerccios:

Definir as expresses regulares capazes de definir:

Exemplo: Nmero de matrculas da UNISC


m numInicial (num)*
numInicial [1-9];
num [0-9]

a) Nmeros de telefones no Brasil

b) Placas de carro no Brasil

Geovane Griesang 54
Anlise lxica
Avaliao:

Disponvel no EAD, a partir das 20:30h.

10 questes para serem respondidas.

3 tentativas.

Nota igual a mdia tirada nas trs tentativas (ou menos)

Intervalo entre as tentativas: 24h.

Boa sorte!!

Geovane Griesang 55
Universidade de Santa Cruz do Sul UNISC
Departamento de informtica

COMPILADORES

Obrigado!!

Prof. Geovane Griesang


geovanegriesang@unisc.br

Você também pode gostar