Gramaticas Compiladores
Gramaticas Compiladores
Gramaticas Compiladores
ENGENHARIA INFORMÁTICA
TRABALHO DE COMPILADORES
3º ANO – II SEMESTRE
TURMA: B
PERÍODO LABORAL
GRAMÁTICAS
TETE, 2022
Eliote Filipe Jonasse
GRAMÁTICAS
• Hierarquia de Chomsky;
• Tipos de Gramática;
• Maquinhas de Turing;
• Autómato de Pilhas.
TETE, 2022
2
Índice
Introdução......................................................................................................................... 2
Símbolo ............................................................................................................................ 3
Alfabeto ............................................................................................................................ 4
2. Gramáticas .................................................................................................................... 5
Conclusão ....................................................................................................................... 11
Bibliografia..................................................................................................................... 12
Introdução
2
1. Conceitos básicos sobre linguagens formais
Segundo FURTADO (1992), a importância desta teoria é dupla: tanto apoia outros
aspectos teóricos da teoria da computação, tais como decibilidade, computabilidade,
complexidade, etc. como fundamenta diversas aplicações computacionais, como por
exemplo processamento de linguagens, reconhecimento de padrões, modelagem de
sistemas, etc. Mas, o que é uma linguagem?
Símbolo
Um símbolo é uma entidade abstracta básica sem definição formal. São exemplos de
símbolos as letras, os dígitos, etc. Símbolos são ordenáveis lexicograficamente e,
portanto, podem ser comparados quanto à igualdade ou precedência. Por exemplo,
tomando as letras dos alfabetos, tem-se a ordenação A < B < C < ... < Z. A principal
utilidade dos símbolos está na possibilidade de usá-los como elementos atómicos em
definições de linguagens.
3
Sentença (ou palavra)
Uma sentença (ou palavra) é uma sequência finita de símbolos justapostos (isto é,
sem vírgulas separando os caracteres). Sejam P, R, I, M, e A símbolos, então PRIMA
é uma sentença.
O tamanho (ou comprimento) de uma sentença w, denotado por |w|, é dado pelo
número de símbolos que compõem w.
Alfabeto
4
e x. No exemplo acima, se tomarmos w = compila e x = dores, então temos wx =
compiladores.
2. Gramáticas
5
Formalmente, uma gramática é especificada por uma quádrupla (N,T,P,S), onde:
Uma produção (n,p) pode ser escrita n ::= p, para facilitar a leitura. No caso de
existir mais de uma alternativa para uma mesma configuração e símbolos do lado
esquerdo da regra, como por exemplo:
<substantivo>:: = arroz
<substantivo>:: = caldo
<substantivo>:: = benny
Pode-se escrever as opções em uma única produção, separada por |.
• O exemplo acima ficaria:
<substantivo> ::= arroz | caldo | benny.
O símbolo ::= pode ser lido como “é definido por” e o símbolo | pode ser lido como
“ou”.
2.1. Tipos de gramáticas
a) Tipo 0: Não há restrição na forma das produções. Este é o tipo mais geral.
Exemplo: S ::= ABS | ab Ba ::= aB | a Aa ::= aa | a | ε
6
Exemplo:
CB ::= BC
aB ::= ab
bB ::= bb
bC ::= bc
cC ::= cc
Exemplo:
S ::= aS | bB
B ::= bB | bC
C ::= cC | ε
7
2.2. Hierarquia de Chomsky
Pode-se ver que uma linguagem do tipo 3 é também do tipo 2, uma linguagem do
tipo 2 é também do tipo 1, e uma linguagem do tipo 1 é também do tipo 0. Estas
inclusões são estritas, isto é, existem linguagens do tipo 0 que não são do tipo 1,
existem linguagens do tipo 1 que não são do tipo 2 e existem linguagens do tipo 2
que não são do tipo 3.
3. Maquina de Turing
8
"alfabeto". Quando trabalha com código binário, seu alfabeto total é dois (0 ou 1),
mas pode ser tão amplo quanto for considerado apropriado para a função a ser
desempenhada.
A máquina de Turing exemplo lida com uma série de 0s e 1s, com 0 representado
pelo símbolo em branco. Sua tarefa é dobrar qualquer série de 1s encontradas na fita
escrevendo um 0 entre eles. Por exemplo, quando a cabeça lê "111", vai escrever um
0, em seguida, "111". A saída será "1110111".
4. Automato de pilha
O autômato de pilha (AP) é composto por uma entrada, um autômato finito e uma pilha.
A pilha é uma cadeia de símbolos de algum alfabeto. O símbolo mais à esquerda da pilha
é considerado como seu topo. A máquina será não-determinística, tendo um número finito
de escolhas de movimentos a efetuar em cada situação. Os movimentos podem ser de dois
tipos.
No primeiro tipo de movimento o símbolo da entrada é usado. Dependendo do símbolo
da entrada, do topo da pilha e do estado do autômato finito, algumas escolhas são
possíveis. Cada escolha consiste de um estado seguinte para o autômato finito e uma
cadeia de símbolos (possivelmente vazia) para ser trocada pelo topo da pilha. Após
selecionar uma escolha, um símbolo é consumido da entrada.
O segundo tipo de movimento (chamado ε-movimento) é similar ao primeiro, exceto que
ele não consome símbolos da entrada. Este tipo de movimento permite que o AP manipule
a pilha sem ler símbolos da entrada.
Finalmente, devemos definir a linguagem aceita por um autômato de pilha. Há duas
formas naturais para fazer isto. A primeira, que já foi vista, é definir a linguagem aceita
como sendo o conjunto de todas as entradas para as quais alguma seqüência de
9
movimentos faz com que a pilha do autômato fique vazia. Esta linguagem é conhecida
como a linguagem aceita por pilha vazia.
A segunda forma de definir a linguagem reconhecida é similar à forma utilizadas para
autômatos finitos. Isto é, designamos alguns estados como estados finais e definimos a
linguagem aceita como o conjunto de todas as entradas para as quais alguma escolha de
movimentos leve a um estado final.
Como podemos ver, as duas definições são equivalentes no sentido de que um conjunto
que pode ser aceito por pilha vazia em um AP pode ser aceito por um estado final em
outro AP, e vice-versa.
Reconhecimento por estado final é a noção mais comum, mas é fácil provar o teorema
básico dos autómatos de pilha usando reconhecimento por pilha vazia. Este teorema
estabelece que uma linguagem é aceita por um AP se e somente se ela é uma linguagem
livre de contexto.
Um autómato de pilha M é uma tupla (E, A, P, t, e0, p0, F), onde:
• E é um conjunto finito de estados;
• A é um alfabeto de entrada;
• P é um alfabeto da pilha;
• e0 ∈ E é o estado inicial;
• p0 ∈ P é o símbolo inicial da pilha;
• F ⊆ E é o conjunto de estados finais;
• t é um mapeamento de E × {A ∪ {ε}} × P em subconjuntos finitos de E × P*.
A menos que seja explicitamente dito, usaremos letras minúsculas do início do alfabeto
para denotar símbolos da entrada e letras do fim do alfabeto para denotar cadeias de
símbolos de entrada.
Letras maiúsculas denotarão símbolos da pilha e letras gregas indicarão cadeias de
símbolos da pilha.
10
Conclusão
Depois de uma vasta pesquisa sobre as gramáticas concluímos que elas são uma
ferramenta importante no estudo de compiladores, uma gramática gerativa é um
instrumento formal capaz de construir (gerar) conjuntos de cadeias de uma
determinada linguagem. As gramáticas são instrumentos que facilitam muito a
definição das características sintácticas das linguagens. São instrumentos que
permitem definir, de forma formal e sistemática, uma representação finita para
linguagens infinitas. Usar um método de definição de conjuntos particular para
definir uma linguagem pode ser um passo importante no projecto de um
reconhecedor para a linguagem, principalmente se existirem métodos sistemáticos
para converter a descrição do conjunto em um programa que processa o conjunto.
Como veremos adiante neste curso, certos tipos de gramáticas, que possuem
algoritmos para definir se uma sentença pertence ou não à linguagem que geram, são
utilizadas para implementar compiladores. Já gramáticas que não permitem a
definição de algoritmos não podem ser utilizadas para tal.
11
Bibliografia
Apostila-compiladores-i-campus-de-presidente-apostila-compiladores-i-i-
sumario.pdf
apostila-LFeC-II.pdf
http://www.dcc.ufrj.br/~fabiom/sem
12