Académique Documents
Professionnel Documents
Culture Documents
Departamento de informtica
COMPILADORES
Anlise lxica
Parte 01
Geovane Griesang
geovanegriesang@unisc.br
Compilador
Compilador
Portanto:
Cria representaes intermedirias do programa
Verifica presena de certos tipos de erros
Geovane Griesang 2
Compilador
Compilador
Geovane Griesang 3
Compilador - fases
Anlise
Cdigo fonte Analisador lxico
Analisador lxico
Analisador sinttico
Analisador semntico
Otimizador de cdigo
Geovane Griesang 4
Anlise lxica
2. Anlise Lxica:
Geovane Griesang 5
Anlise lxica
Funcionalidade dos analisadores lxicos
Geovane Griesang 6
Anlise lxica
Resumo
Geovane Griesang 7
Anlise lxica
Resumo
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
Tabela de
smbolos
Geovane Griesang 10
Anlise lxica
Cenrio interaes entre os analisadores lxico e sinttico
Tabela de
smbolos
Geovane Griesang 11
Anlise lxica
Vantagens da diviso em anlise lxica (AL) e sinttica (AS):
Geovane Griesang 12
Anlise lxica
Tokens, padres e lexemas
Geovane Griesang 13
Anlise lxica
Tokens, padres e lexemas
Geovane Griesang 14
Anlise lxica
Tokens, padres e lexemas
Geovane Griesang 15
Anlise lxica
Tokens, padres e lexemas
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
Geovane Griesang 17
Anlise lxica
Tokens, padres e lexemas
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
<id, a> <=, > <id, b> <+, > <num, 3>
Geovane Griesang 19
Anlise lxica
Tokens, padres e lexemas Exemplo
Texto de entrada:
if (x >= y) then
y = 42;
Geovane Griesang 20
Anlise lxica
Tokens, padres e lexemas
Geovane Griesang 21
Anlise lxica
Erros lxicos
Geovane Griesang 22
Anlise lxica
Erros lxicos
Geovane Griesang 23
Anlise lxica
Buffers de entrada
Geovane Griesang 24
Anlise lxica
Buffers de entrada Pares de bufferes
E = M * C * * eof
forward
lexemeBegin
Geovane Griesang 25
E = M * C * * eof
Geovane Griesang 26
E = M * C * * eof
Geovane Griesang 27
Anlise lxica
Buffers de entrada Pares de bufferes
E = M * C * * eof
forward
lexemeBegin
Geovane Griesang 28
E = M * C * * eof
Geovane Griesang 29
E = M * C * * eof
Geovane Griesang 30
E = M * C * * eof
Geovane Griesang 31
Anlise lxica
Especificao de tokens
Geovane Griesang 32
Anlise lxica
Especificao de tokens - Operaes sobre linguagens
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* =
Geovane Griesang 34
Unio de L e M
Geovane Griesang 35
Anlise lxica
Especificao de tokens - Expresses Regulares (ER)
Geovane Griesang 36
Anlise lxica
Especificao de tokens - Expresses Regulares (ER)
Geovane Griesang 37
Anlise lxica
Especificao de tokens - Expresses Regulares (ER)
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.
Geovane Griesang 39
Anlise lxica
Especificao de tokens - Expresses Regulares (ER)
Geovane Griesang 40
Anlise lxica
Especificao de tokens - Expresses Regulares (ER)
Geovane Griesang 41
Anlise lxica
Especificao de tokens - Expresses Regulares (ER)
Geovane Griesang 42
Anlise lxica
Especificao de tokens - Expresses Regulares (ER)
Geovane Griesang 43
Anlise lxica
Especificao de tokens - Expresses Regulares (ER)
Uma linguagem que pode ser definida por uma ER um conjunto regular.
Exemplo: (a | b) = (b | a)
Geovane Griesang 44
Anlise lxica
Especificao de tokens - Expresses Regulares (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
Geovane Griesang 46
Anlise lxica
Especificao de tokens Definies regulares
Geovane Griesang 47
Anlise lxica
Especificao de tokens Extenses de expresses regulares
Geovane Griesang 48
Anlise lxica
Especificao de tokens Extenses de expresses regulares
Geovane Griesang 49
Anlise lxica
Especificao de tokens Extenses de expresses regulares
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:
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:
Geovane Griesang 54
Anlise lxica
Avaliao:
3 tentativas.
Boa sorte!!
Geovane Griesang 55
Universidade de Santa Cruz do Sul UNISC
Departamento de informtica
COMPILADORES
Obrigado!!