Você está na página 1de 31

ENG.

INFORMÁTICA

COMPILADORES
COMPILADORES
ENG. INFORMÁTIC A

Capítulo 2: Definição de Linguagens

• Linguagens Formais

• Definição de linguagem, definição de alfabeto, definição de


palavra, definição da linguagem em extensão/compreensão,
concatenação de palavras, imagem inversa, operações com
linguagens

• Linguagens e Expressões Regulares (ER)

• Definição de linguagens regulares, ER, Exemplos, ER no UNIX


COMPILADORES
ENG. INFORMÁTIC A

Capítulo 2: Definição de Linguagens Formais

• Gramáticas

• Definição de gramática generativa, classificação de gramáticas, hierarquia de


Chomsky, linguagem gerada por uma gramática, equivalência de gramáticas,
representação de gramáticas, Backus-Naur Form, diagramas de sintaxe, derivação de
um passo, derivação, derivação pela esquerda (ou direita), símbolo anulável, símbolo
activo, símbolo acessível, gramática reduzida, gramáticas ambíguas, árvore de
derivação

• Gramáticas recursivas e recursividade, definição de First, Follow and Lookahead,


Gramática LL(1), trasnformações esseciais à condição LL(1)

• Gramáticas Regulares (GR)

• Definição de gramática regular, forma normal de chomsky

• Gramáticas Independentes de Contexto (GIC)


CAPÍTULO 2
LINGUAGENS FORMAIS

Definição [Alfabeto] É um conjunto finito e não vazio de símbolos


arbitrários é designado por alfabeto (ou vocabulário) e denotado por
𝒱.

Os elementos de são 𝒱 são designados letras ou símbolos.

Ex. a, b, c, ⋯, x, y, z Alfabeto latino


linguagens naturais
α, β, γ, ⋯, π, τ, o Alfabeto grego

Ex. ASCII 𝒱 = {0,1}


EBCDIC linguagens formais
UNICODE
CAPÍTULO 2
LINGUAGENS FORMAIS

Definição [Palavra] As sequências finitas de letras são designadas por


palavras sobre o alfabeto 𝒱.

𝒱* representa o conjunto de todas as palavras sobre 𝒱.

Nota: Em alguns livros os elementos de 𝒱 são designados por palavras e


os de 𝒱* por frases (strings).

Ex. 2 possibilidades diferentes:

i) 𝒱 = {a, b, c, ⋯, z} 𝒱* ⊃ palavras da língua portuguesa

ii) 𝒱= palavras da língua portuguesa listadas num dicionário


𝒱* ⊃ frases construídas de acordo com a gramática da língua portuguesa
CAPÍTULO 2
LINGUAGENS FORMAIS

ε é a palavra vazia; não contém nenhuma letra. Considera-se que


ε ∈ 𝒱*, ∀𝒱

v é o comprimento de v, é dado pelo nr de símbolos da cadeia v

Ex. ε = 0 e com v = abbcd, v = 5

Definição [Concatenação de palavras] A concatenação de 2


palavras P e Q, denotada por PQ é a palavra formada por
justaposição dos símbolos de P com os de Q.

Ex. P = Teresa R = “ “ e Q = Perdicoúlis, PRQ = Teresa Perdicoúlis


CAPÍTULO 2
LINGUAGENS FORMAIS

A concatenação de palavras é:

• Associativa ∀P, Q, R ∈ 𝒱*, (PQ)R = P(QR)

• Não é em geral comutativa ∀P, Q ∈ 𝒱*, PQ = QP

• Tem elemento neutro: a palavra vazia ∀P ∈ 𝒱*, Pε = εP = P

• O conj. 𝒱* é fechado para a concatenação de palavras


∀P, Q ∈ 𝒱* ⟹ PQ ∈ 𝒱*

Ex. concatenação de “Estudo de ” com “processadores de


linguagens” fica “Estudo de processadores de linguagens”
CAPÍTULO 2
LINGUAGENS FORMAIS

Duas palavras são iguais, se uma é cópia exacta, letra por letra, da outra.

A palavra P é parte da palavra Q se existirem P1 e P2 tais que Q = P1PP2:

• Se P1 = ε ∧ P1 = ε ⟹ P é igual a Q

• Se P1 ≠ ε ∨ P1 ≠ ε ⟹ P é parte própria de Q: P é subfrase de Q

• P1 = ε ⟹ P é prefixo de Q
• P2 = ε ⟹ P é sufixo de Q

Ex. Considere-se a palavra Q = abba e P = bb, então P1 = a e P2 = a

P n,  com n ∈ ℕ e P ∈ 𝒱*, denota a concatenação de P consigo pp n


vezes; P 0 = ε
CAPÍTULO 2
LINGUAGENS FORMAIS

A imagem inversa de P, denotada P −1, é a palavra que se obtém de


P por inversão da ordem das letras

Ex. P = abcd e P −1 = dcba

Temos que (P −1)−1 = P e (P i)−1 = (P −1)i


CAPÍTULO 2
LINGUAGENS FORMAIS

Definição [Linguagem] Um subconjunto arbitrário de palavras de 𝒱* é


designado por uma linguagem, e é denotado por ℒ

∅ a linguagem vazia (não contém nenhuma palavra)

Atenção! ε = palavra vazia


ℒ = {ε} contém somente a palavra vazia
ℒ=∅ não contém nenhuma palavra

𝒱*\{ε} = 𝒱+

𝒱2 = palavras (strings ou frases) de comprimento 2


CAPÍTULO 2
LINGUAGENS FORMAIS

Uma linguagem ℒ ⊂ 𝒱* é finita se contém um nr finito de palavras

A linguagem (completa) 𝒱* é sempre infinita e enumerável

O conjunto de todas as linguagens sobre um dado alfabeto (finito) é


infinito e não enumerável

Nota: Para definir uma ling. é necessário encontrar um processo


finito (e fácil) de a caracterizar; uma forma de o fazer é recorrendo à
definição de conjuntos e utilizando as operações acima descritas
como forma de caracterizar a construção de palavras.
CAPÍTULO 2
LINGUAGENS FORMAIS

Ex. 𝒱 = {a, b}
ℒ1 = {a, b, ε}
ℒ2 = {a i, b i : i = 0,1,⋯}
ℒ3 = {PP −1 : P ∈ 𝒱*} palíndromos
n2
ℒ4 = {a : n = 1,2,⋯}

são tudo definições possíveis de ling. sobre 𝒱

A definição de ℒ1 foi feita em extensão; a definição de ℒ2, ℒ3, ℒ4foi feita por
compreensão — ou de forma predicativa: através de predicados ou regras

Torna-se claro que precisamos de uma forma mais poderosa de definir


linguagens …
CAPÍTULO 2
LINGUAGENS FORMAIS: OPERAÇÕES

Como uma linguagem é um conj. de palavras, podemos definir sobre


uma linguagem as habituais operações de conjuntos:

ℒ1 ∪ ℒ2 = {P : P ∈ ℒ1 ou P ∈ ℒ2} União

ℒ1 ∩ ℒ2 = {P : P ∈ ℒ1 e P ∈ ℒ2} Intersecção

ℒ1 = ℒ1\ℒ2 = {P : P ∈ ℒ1 e P ∉ ℒ2} Complementar

Nota: o complementar de uma linguagem é calculado em relação à


ling. completa, 𝒱* : ℒ = 𝒱*\ℒ
CAPÍTULO 2
LINGUAGENS FORMAIS

O conceito de concatenação de palavras pode ser extendido às


próprias linguagens:

ℒ1ℒ2 = {P1P2 : P1 ∈ ℒ1 e P2 ∈ ℒ2}

Definimos agora a iteração de uma linguagem ℒ, ℒi, i ∈ ℕ0

Por convenção: ℒ0 = {ε}

∅ℒ = ℒ∅ = ∅, ∀ℒ
{ε}ℒ = ℒ{ε} = ℒ, ∀ℒ
CAPÍTULO 2
LINGUAGENS FORMAIS

O fecho da iteração — fecho de Kleene — é definido como

ℒ* = ∪i≥0 ℒi

Observação: Esta notação está de acordo com a notação 𝒱*, se se


considerar o alfabeto 𝒱 como uma linguagem contendo palavras de
uma só letra — ℒ = {v : v = 1 e v ∈ 𝒱}

Se se definir ℒ+ = ∪i≥1 ℒi, temos:

ℒ+ = ℒ*,  se ε ∈ ℒ

ℒ+ = ℒ*\{ε},  se ε ∉ ℒ
CAPÍTULO 2
LINGUAGENS FORMAIS

A linguagem espelho define-se como:

ℒ−1 = {P : P −1 ∈ ℒ}

(ℒ ) = ℒ e (ℒ ) = (ℒ )
−1 −1 −1 i i −1
e verifica-se: = ℒ−i, i = 0,1,2,⋯

São operações regulares:


• a união
• a concatenação
• o fecho de Kleene

As ERs são detentoras de propriedades importantes …


CAPÍTULO 2
LINGUAGENS E EXPRESSÕES REGUL ARES

As linguagens regulares (LR) constituem o tipo mais simples de


linguagens; o seu interesse resulta da possibilidade do seu
tratamento computacional

Definição [Linguagem Regular] Uma linguagem diz-se regular se


puder ser obtida aplicando um nr finito de operações regulares
sobre as seguintes linguagens:

• linguagem vazia

• linguagem cuja única palavra é a palavra vazia

• linguagem com uma única palavra


CAPÍTULO 2
LINGUAGENS E EXPRESSÕES REGUL ARES

As expressões regulares (ER) permitem representar de modo muito


sucinto as LR

Uma das vantagens das ER reside na possibilidade da sua utilização


como linguagem de especificação dos ALs

Proposição: Toda a ER denota uma LR e, conversamente, toda a LR


é denotada por uma ER.

Podemos então usar as ERs como forma de definir/manipular as LRs.


CAPÍTULO 2
LINGUAGENS E EXPRESSÕES REGUL ARES

Definição [Expressão Regular (ER)] Uma expressão regular sobre


um alfabeto finito 𝒱 é definida de modo indutivo como se segue:

• ε é uma ER

• a é uma ER, ∀a ∈ 𝒱

• se R é uma ER sobre 𝒱 então (R)* também o é

• se Q,P são ER sobre 𝒱 então também (Q);(P) — concatenação


— e (Q)|(P) — união — o são
CAPÍTULO 2
LINGUAGENS E EXPRESSÕES REGUL ARES

Para efeitos de simplificação de escrita, podemos acrescentar:

• ∅ é uma ER — denota a ling. vazia

• se R é uma ER sobre 𝒱 então R+ também o é

• [a, b, c] ≐ a | b | c e [a − z] ≐ a | b | … | z

vejamos melhor a notação …


• ε denota {ε}
• a denota {a}
• a | b denota {a, b}
• a; b denota {a} {b}
CAPÍTULO 2
LINGUAGENS E EXPRESSÕES REGUL ARES

Ex. 𝒱 = {a, b}, ordem das operações: * , ; , | Então:

a* ou {a}*

(a | b)* ou {a, b}*

a*; b ou {a}* b

+ *
b | a; b* ou  {b} ∪ {a} {b}

*
(a | b); a* ou  {a, b} {a}

Por favor escrevam linguagens com estas ERs


CAPÍTULO 2
LINGUAGENS E EXPRESSÕES REGUL ARES

Podemos também estabelecer a equivalência de ERs tendo em


conta as propriedades de que elas gozam:

• ε é o el. neutro da concatenação: aε = εa = a


• a concatenação é associativa: α(βγ) = (αβ)γ
• ∅ é o el. entro da união: (α | ∅) = (∅ | α) = α
• a união é associativa, comutativa e idempotente:
• (α | β) | γ = α | (β | γ), (α | β) = (β | α), (α | α) = α
• a concatenação é distributiva, à esq. e à dir., em relação à
união: ex: (a | b); a* ou a*; (a | b)
• α + = αα*, α* = ε | α +, α* = (α | ε)+ = (ε | α)+
CAPÍTULO 2
LINGUAGENS E EXPRESSÕES REGUL ARES

notação alternativa:

• p+q união

• pq concatenação

Ex. Os identificadores em C podem ser definidos por uma sequência


finita de letras/digítos e a começar por uma letra
letra ⟶ A | B | ⋯ | Z | a | b | ⋯ | z
digito ⟶ 0 | 1 | ⋯ | 9
identificador ⟶ letra(letra | digito)*
CAPÍTULO 2
LINGUAGENS E EXPRESSÕES REGUL ARES

Ex. Números inteiros com sinal


d = {0,1,2,3,4,5,6,7,8,9}  e S = {+, −}
S ⟶ + /−
d ⟶ [0 − 9]
inteiro ⟶ (ε | S); d +

Ex. Pretende-se identificar uma ER mais simples de a*b | a*bb +


a*b | a*bb +
a*b(ε | b +)
a*bb*
a*b +

Ex. (notação) a | b*c equivalente a (a) | ((b*)c) e a | b | c equivalente a (a | b) | c


CAPÍTULO 2
AUL A 2: ÁLGEBRA DAS EXPRESSÕES REGUL ARES

αε = εα = α Elemento neutro da concatenação

α+∅=∅+α =α Elemento neutro da união

(α + β) + γ = α + (β + γ) Associatividade da união

(αβ)γ = α(βγ) Associatividade da concatenação

α+β=β+α Comutatividade da união

α+α =α+α Idempotência

α(β + γ) = αβ + αγ Distributividade à dir da concatenação

(β + γ)α = βα + γα Distributividade à esq. da concatenação

α + = αα* = α*α Relação entre união e concatenação

α* = ε + α + Relação entre união e concatenação

(α + ε)+ = (ε + α)+ = α* Relação entre união e concatenação


CAPÍTULO 2
LINGUAGENS E EXPRESSÕES REGUL ARES

As ERs, consequentemente as LRs, são no entanto insuficientes para


poder expressar completamente a maior parte das linguagens de
programação;

p.ex., são incapazes de denotar uma linguagem com igual nr de


parêntesis a abrir e a fechar.

Precisamos de uma forma mais poderosa para definir uma


linguagem …
COMPILADORES
ENG. INFORMÁTIC A

Capítulo 2: Definição de Linguagens

• Linguagens Formais

• Definição de linguagem, definição de alfabeto, definição de


palavra, definição da linguagem em extensão/compreensão,
concatenação de palavras, imagem inversa, operações com
linguagens

• Linguagens e Expressões Regulares (ER)

• Definição de linguagens regulares, ER, Exemplos, ER no UNIX


COMPILADORES
ENG. INFORMÁTIC A

Trabalho 1: Escrever em latex um pequeno documento sob o tema


Compiladores

• trabalhos de 2 alunos

• 4 páginas no máximo

• sobre um qq tema relacionado com compiladores

• entrega via side: 7 Novembro de 2020

• submissão só no side, em ficheiro .pdf

• não são contemplados qq atrasos

• quem infringir qq uma destas regras, tem zero valores


COMPILADORES
ENG. INFORMÁTIC A

Trabalho 1: Recomendações

• Sensatez na escolha da classe. Sug: a classe artigo

• O trabalho deve estar devidamente organizado

• Ter uma introdução/conclusão bem escritas

• O trabalho deve ser original. Atenção ao plágio! Usar fontes bibliográficas


diversas. Efectuar a citação e escrever as referências de forma adequada.

• Trabalhos iguais têm zero.

• Os trabalhos deverão conter os membros do grupo devidamente


identificados.
COMPILADORES
ENG. INFORMÁTIC A

Inscrição no Moodle: aviso no SIDE.


COMPILADORES
ENG. INFORMÁTIC A

Capítulo 2: Definição de Linguagens Formais

• Gramáticas

• Definição de gramática generativa, classificação de gramáticas, hierarquia de


Chomsky, linguagem gerada por uma gramática, equivalência de gramáticas,
representação de gramáticas, Backus-Naur Form, diagramas de sintaxe, derivação de
um passo, derivação, derivação pela esquerda (ou direita), símbolo anulável, símbolo
activo, símbolo acessível, gramática reduzida, gramáticas ambíguas, árvore de
derivação

• Gramáticas recursivas e recursividade, definição de First, Follow and Lookahead,


Gramática LL(1), trasnformações esseciais à condição LL(1)

• Gramáticas Regulares (GR)

• Definição de gramática regular, forma normal de chomsky

• Gramáticas Independentes de Contexto (GIC)

Você também pode gostar