Compiladores Linguagens definidas por gramática Aula 04 Prof. Me Ivan José dos Reis Filho Aulas anteriores • O que é uma gramática? – Sistema gerador de linguagens – Um sistema de reescrita – Uma maneira finita de descrever (representar) uma linguagem Aulas anteriores • Linguagens Formais – Vocabulário – Palavras – Frases • Gramática Geradora G = (Σ, T, S, P) – – – – Símbolos não terminais - Maiúscula Símbolos terminais - Minúscula Símbolo inicial – Lado Esquerdo Conjunto de regras sintáticas • P ⊆ (Σ ∪ T)+ x (Σ ∪ T)* Reforço • Exemplo G = (Σ, T, S, P) da língua portuguesa – Σ = { <sentença> , <sujeito> , <predicado> , <substantivo> ,<artigo> , <adjetivo> , <predicado> , <verbo> , <objeto> } – T = { joão, maria , cachorro, livro , pão, o , a , pequeno, bom , bela , morde , le , olha } – P = é o conjunto das regras gramaticais apresentado – S = <sentença> Reforço • Analogia de G = (Σ, T, S, P) para uma noção formal – Σ – são as categorias sintáticas ou gramaticais; – T – são as palavras utilizadas como símbolos da linguagem; – P – são as regras sintáticas (ou gramaticais); – S - é a categoria gramatical que sintetiza o que será produzido (gerado) pela gramática. Reforço • Exemplo intuitivo de uma Gramática (um subconjunto da gramática da língua portuguesa) <sentença> → <sujeito> <predicado> <sujeito> → <substantivo> | <artigo> <substantivo> | <artigo> <adjetivo> <substantivo> <predicado> → <verbo> <objeto> <substantivo> → joão | Maria | cachorro | livro | pão <artigo> → o | a <adjetivo> → pequeno | bom | bela <verbo> → morde | le | olha <objeto> → <substantivo> | <artigo> <substantivo> | <artigo> <adjetivo> <substantivo> Linguagens geradas por uma gramática Exemplo: Consideremos a gramática G = (Σ, T, P, S) onde –Σ={S} – T = { a, b } Quais são as produções possíveis? Linguagens geradas por uma gramática Exemplo: Consideremos a gramática G = (Σ, T, P, S) onde –Σ={S} – T = { a, b } Quais são as produções possíveis? P = {S → aSb , S → ab, S → ba, S → a, S → b} ou P = {S → aSb | ab | ba | a | b} Linguagens geradas por uma gramática • Exemplo Consideremos a gramática G = ({E}, {+, *, [, ], x}, P, E) Quais são as produções possíveis? Linguagens geradas por uma gramática • Exemplo Consideremos a gramática G = ({E}, {+, *, [, ], x}, P, E) Quais são as produções possíveis? P = { E → E+E | E*E | [E] | x } Linguagens geradas por uma gramática • Exemplo Consideremos a gramática G = ({S}, {0,1}, P, S) Quais são as produções possíveis? Linguagens geradas por uma gramática • Exemplo Consideremos a gramática G = ({S}, {0,1}, P, S) Quais são as produções possíveis? P = { S → 0S1 | 01 | 0 | 1} Linguagens geradas por uma gramática • Definir a gramática que gera Palíndromos, i.e: – Direita para esquerda – Esquerda para a direita Gramática G=({A}, {0, 1}, P, S) Produção P = {S → 0 | 1 | 00 | 11 | 0A0 | 1A1} Derivação continua Derivação P = {S → 0 | 1 | 00 | 11 | 0A0 | 1A1 | λ} S → 0A0 00A00 001A100 0010A0100 0010λ0100 Resultado = 00100100 Derivação P = { E → E + E | E * E | [E] | x } Por exemplo, a expressão [x+x]*x pode ser gerada pela seguinte sequência de derivações: E→ E*E [E] * E [E+E] * E [x+E] * E [x+x] * E [x+x] * x Exercício • Forme a gramática das seguintes produções 1) P = {S → S | a S a | b S b } 2) S→abA A→aA|bA|B B → ba 3) S→aS|bS|B B → aa | bb Exercício • Verifque se as seguintes palavras são reconhecidas pela gramática 1) S → SS | a S a | b S b | λ a) abba b) aabbaaaa 2) S → a b A A→aA|bA|B B → ba a) abbbaba b) abba