Você está na página 1de 17

Introduo

Pr-processador
Analisador Lxico
Analisador Sinttico

front-end

Analisador Semntico
Gerador de Cdigo
(intermedirio)

Otimizador

back-end
Gerador de Cdigo

Introduo
final = (nota1 + nota2) / 2;
Analisador Lxico
Id1 = (Id2 + Id3) / 2
Analisador Sinttico
=
Id1

Tabela de Smbolos
/
2

+
Id2

Id3

Id1

final

double

...

Id2

nota1

double

...

Id3

nota2

double

...

...

Introduo
Analisador Semntico
=
Id1

/
intToDouble(2)

+
Id2

Id3

Gerador de Cdigo
(intermedirio)

temp1 = Id2 + Id3


temp2 = temp1 / 2.0
Id1 = temp2

Tabela de Smbolos
Id1

final

double

...

Id2

nota1

double

...

Id3

nota2

double

...

...

Anlise Lxica

O Analisador Lxico (scanner) examina o


programa fonte caractere por caractere
agrupando-os em conjuntos com um significado
coletivo (tokens):
palavras chave (if, else, while, int, etc),
operadores (+, -, *, /, ^, &&, etc),
constantes (1, 1.0, a, 1.0f, etc),
literais (Projeto Mono),
smbolos de pontuao (; , {, }),
labels.

Anlise Lxica
constanteInt
digito digito*
constanteDouble digito digito*. digito*

digito {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
X* Representa uma seqncia de zero ou mais X.

Anlise Sinttica
Verifica se as frases obedecem as regras
sintticas da linguagem:
Por exemplo, uma expresso pode ser definida
como:
expresso + expresso
expresso expresso
(expresso)
constante

Gramticas
Um conjunto de regras de produo, um
smbolo de partida. Uma regra de produo
tem o formato , onde representa o
nome da construo sinttica e representa
uma forma possvel dessa construo:
<expresso> <expresso> + <expresso>

Gramticas
<expr> <expr> + <expr>
| <expr> <expr>
| (<expr>)
| <const>
<const> <const><const>
|0|1|2|3|4|5|6|7|9

Derivao
A verificar se uma frase faz parte da linguagem
gerada pela gramtica, envolve sucessivas
substituies da cadeia de smbolos que ocorre
do lado esquerdo da produo pela sua
construo sinttica correspondente, partindo
do smbolo inicial.
Essa substituio chamada derivao sendo
normalmente denotada pelo smbolo .

Derivao
<expresso>
<expr> + <expr>
(<expr>) + <expr>
(<expr> - <expr>) + <expr>
(<const> - <expr>) + <expr>
(<const><const> - <expr>) + <expr>
(1<const> - <expr>) + <expr>
(10 - <expr>) + <expr>
(10 - <const>) + <expr>

...

(10 - 2) + 3

rvore Sinttica
(10 2) + 3
<expr>
<expr>

(<expr>)

<expr>
<const>

<expr> - <expr>
<const>
10

<const>
-

Gramticas Ambguas
10 2 + 3
<expr>

<expr>
<expr>

<expr>

<expr>
<expr> + <expr>

10

<expr>

<expr> - <expr>
10

Gramticas
<expr> <expr> + <termo>
| <expr> - <termo>
| <termo>
<termo> (<expr>)
| <const>

<expr>
<expr>

<termo>

<expr> - <termo>

<expr>
10
<expr> + <termo>
<expr> - <termo> + <termo>
<termo> - <termo> + <termo>
10 2 + 3

Gramticas
<expr>

<termo>

<fator>

<expr> + <termo>
| <expr> - <termo>
| <termo>
<termo> * <fator>
| <termo> / <fator>
| <fator>
(<expr>)
| <const>

1+2*3
<expr>

<expr>

<termo>

<termo> * <fator>
3

Gramticas
<expr>

<termo>

<fator>

<expr> + <termo>
| <expr> - <termo>
| <termo>
<termo> * <fator>
| <termo> / <fator>
| <fator>
(<expr>)
| <const>

1+2*3
<expr>

<termo>

<termo> * <fator>

Traduo Dirigida pela


Sintaxe
Programa Fonte
Analisador Lxico
token

Solicita token

Analisador Sinttico

Analisador Semntico
Cdigo Intermedirio

Tabela de Smbolos

...

Gramticas - Exerccios
1.

2.
3.

Considerando a gramtica apresentada anteriormente


derive as expresses e apresente a rvore sinttica
correspondente:
(1 + 2) * 3
(1 2) + 3 * 4
Altere a gramtica para incluir o operador unrio -, esse
operador deve ter precedncia maior que os outros
operadores.
Altere a gramtica para que os operadores de adio,
subtrao, multiplicao e diviso tenham associatividade
da direita para a esquerda.

Você também pode gostar