Linguagens Formais Aula 01 - Conceitos Básicos Prof. Othon Batista Mestre em Informática
Sumário Introdução à Linguagem Alfabeto Cadeias de Símbolos, Palavras Tamanho de Palavra Prefixo, Sufixo ou Subpalavra Concatenação de Palavras Concatenação Sucessiva de uma Palavra Linguagem Formal Gramática Hierarquia de Linguagens
Introdução à Linguagem Linguagem é um conceito fundamental em teoria da computação. A linguagem é uma forma precisa de expressar problemas. Segundo o dicionário Aurélio: Linguagem é o uso da palavra articulada ou escrita como meio de expressão e comunicação entre pessoas
Introdução à Linguagem A definição de Aurélio não é precisa para definir o desenvolvimento matemático de uma teoria de linguagens. As definições a seguir usam como base a noção de símbolo ou caractere. Um símbolo é uma unidade básica, sem definição. Por exemplo: letras e dígitos.
Alfabeto Um alfabeto é um conjunto finito de símbolos ou caracteres. Um conjunto infinito não é um alfabeto. O conjunto vazio é um alfabeto. Exemplos de alfabetos: {a, b, c}, conjunto vazio Não são exemplos de alfabetos: Conjunto dos números naturais {a, b, aa, ab, ba, bb, aaa,...}
Cadeias de Símbolos, Palavras Uma Cadeia de Símbolos sobre um conjunto é uma seqüência de zero ou mais símbolos (do conjunto) justapostos. Uma Cadeia de Símbolos Finita é usualmente denominada de Palavra.
Cadeias de Símbolos, Palavras O símbolo denota a cadeia vazia ou palavra vazia. Se Σ representa um conjunto de símbolos (um alfabeto). Σ* => o conjunto de todas as palavras possíveis sobre Σ. Σ + denota Σ* - {ɛ}.
Cadeias de Símbolos, Palavras Exemplos de palavras: abcb é uma palavra sobre o alfabeto {a, b, c}. Se Σ = {a, b}, então: Σ + = {a, b, aa, ab, ba, bb, aaa,...} Σ* = {ɛ, a, b, aa, ab, ba, bb, aaa,...}
Tamanho de Palavra O comprimento ou tamanho de uma palavra w, representado por w, é o número de símbolos que compõem a palavra. Por exemplo: abcb = 4 e ɛ = 0
Prefixo, Sufixo ou Subpalavra Um prefixo (respectivamente, sufixo) de uma palavra é qualquer seqüência inicial (respectivamente, final) de símbolos da palavra. Uma subpalavra de uma palavra é qualquer seqüência de símbolos contígua da palavra.
Prefixo, Sufixo ou Subpalavra Relativamente à palavra abcb, tem-se que: ɛ, a, ab, abc, abcb são os prefixos ɛ, b, cb, bcb, abcb são os respectivos sufixos Qualquer prefixo ou sufixo de uma palavra é uma subpalavra.
Concatenação de Palavras A concatenação de palavras é uma operação binária, definida sobre uma linguagem L, a qual associa a cada par de palavras uma palavra formada pela justaposição da primeira com a segunda. Por exemplo: Suponha o alfabeto Σ = {a, b}, v = baaaa e w = bb, tem-se que: vw = baaaabb e vɛ = v = baaaa
Concatenação de Palavras Propriedades da concatenação: a concatenação de duas palavras de uma linguagem não necessariamente resulta em uma palavra da linguagem (não fechamento). a concatenação é associativa; v(wt) = (vw)t = vwt a concatenação possui elemento neutro à esquerda e à direita, o qual é a palavra vazia. ɛw = w = wɛ
Concatenação Sucessiva de Uma Palavra A concatenação sucessiva de uma palavra ou simplesmente concatenação sucessiva, representada na forma de um expoente (suponha w uma palavra), w n, n é o número de concatenações sucessivas, é definida indutivamente a partir da operação de concatenação binária: w 0 = ɛ; w n = w n-1 w, para n > 0.
Concatenação Sucessiva de Uma Palavra Sejam w uma palavra e a um símbolo. Então: w 3 = www w 1 = w a 5 = aaaaa a n = aaa...a
Linguagem Formal Uma linguagem formal ou simplesmente linguagem é um conjunto de palavras sobre um alfabeto. Por exemplo, Suponha o alfabeto Σ = {a, b}. Então: O conjunto vazio e o conjunto formado pela palavra vazia são linguagens sobre Σ. Obviamente, { } {ɛ}. O conjunto de palíndromos sobre Σ é um exemplo de linguagem infinita.
Gramática Linguagem de Programação conjunto de todos os programas (palavras). Linguagens Usuais o conjunto de todos os programas é infinito! isso não é adequado para representar em um computador. Gramática um formalismo para especificar de forma finita linguagens infinitas.
Gramática Uma gramática é: um conjunto finito de regras; aplicadas sucessivamente geram palavras; o conjunto de todas as palavras geradas por uma gramática forma uma linguagem (eventualmente é um conjunto infinito). Não há distinção entre gramáticas: linguagens naturais; linguagens de programação.
Gramática Definição formal: G = (N, Σ, V, P, S), sendo: N é um conjunto finito e não vazio de símbolos não terminais; Σ é um conjunto finito e não vazio de símbolos terminais; V = N U Σ; P V* x V* é um conjunto finito e não vazio de regras de produção; S N é o símbolo inicial.
Gramática As regras de produção têm o formato: α β Isso significa que dada uma cadeia axαb, transforma-se em axβb, ao ser aplicada a regra α β. Exemplo: G 1 = ({S}, {0, 1}, {(S, 0S1), (S, ε)}, S) Como saber se 000111 faz parte da linguagem gerada por G 1?
Gramática Tentando gerar a cadeia 000111 a partir do símbolo inicial da gramática: S 0S1 com S 0S1 00S11 com S 0S1 000S111 com S 0S1 000111 com S ε
Gramática, se e somente se, α β. Quando há várias gramáticas, G deve ser utilizado para diferenciá-las. Além disso: i deriva em i passos; * deriva em 0 ou mais passos; + deriva em 1 ou mais passos. α é uma forma sentencial da gramática, se e somente se, S * α.
Gramática Com relação à G 1 : S 0S1; 0S1 00S11; 00S11 000S111; 0S1, 00S11, 000S111 e 000111 são formas sentenciais de G 1. 000111 é formada apenas por símbolos terminais. 000S111 000111, ou simplesmente S 0S1 00S11 000S111 000111, ou S 4 000111, ou ainda S * 000111
Hierarquia de Linguagens Hierarquia de Noam Chomsky
Hierarquia de Linguagens As linguagens são divididas em classes conforme a complexidade: das gramáticas que as geram; das máquinas que as reconhecem. As duas classes mais simples são importantes para o nosso estudo de compiladores. As outras têm grande importância na Teoria da Computação.
Hierarquia de Linguagens Linguagens regulares (tipo 3): a classe mais simples de linguagens; máquina: Autômato Finito Determinístico (AFD) ou Autômato Finito Não Determinístico (AFND). analisador léxico de um compilador!
Hierarquia de Linguagens Linguagens livres de contexto (tipo 2): uma classe um pouco mais complexa que as linguagens regulares; máquina: Autômato com Pilha Determinístico (APD) ou Autômato com Pilha Não Determinístico (APND). analisador sintático de um compilador!
Hierarquia de Linguagens Linguagens sensíveis do contexto (tipo 1): uma classe bem complexa de linguagens; máquina: máquina de Turing. não trabalhamos com essa classe em compiladores.
Hierarquia de Linguagens Linguagens irrestritas (tipo 0): a classe mais complexa de linguagens; máquina: máquina de Turing. não trabalhamos com essa classe em compiladores.