Linguagem e Gramática
• Como definir uma linguagem em computação?
• Temos que saber o que é:
• Alfabeto
• Palavra
• Gramática
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 111
Linguagem e Gramática
•
Alfabeto
• Conjunto finito de símbolos ou caracteres
• Exemplo:
• = {a, b, c ...z; A,B,C...Z}
• = Ø
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 112
Linguagem e Gramática
•
Palavra
• Cadeia de caracteres ou sentenças sobre um alfabeto.
• Sequência finita de símbolos justaposto
• Exemplo:
• Imagine o alfabeto
•= {a, b, c}
• Teríamos:
•aa
•ab
•abb
•acb
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 113
The Compiling Process
Analisador Léxico
•
Analisador Léxico
• Em termos conceituais analisador léxico é a parte de um compilador responsável por reconhecer os grupos de caracteres.
• Características dos analisadores léxicos
• É a primeira parte de um compilador;
• Tem a função de reconhecer os grupos de caracteres reservador
• Aponta erros na morfologia do token definido
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 115
Analisador Léxico
•
Analisador Léxico
• Também denominado de scanner, porque varre o arquivo de entrada eliminando comentários e caracteres indesejáveis ao agrupar caracteres com um papel bem definido.
• Papel do analisador léxico: ler o arquivo fonte em busca de unidades significativas (os tokens) instanciadas por lexemas ou átomos.
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 116
Analisador Léxico
•
Analisador Léxico
• A separação da análise léxica da análise sintática facilita o projeto e torna o compilador mais eficiente e portável.
• Um analisador léxico executa tarefas como:
• 1. contar as linhas de um programa
• 2. eliminar comentários
• 3. contar a quantidade de caracteres de um arquivo
• 4. tratar espaços
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 117
Analisador Léxico
•
Analisador Léxico
• Tokens – são padrões de caracteres com um significado específico em um código fonte. Definida por um alfabeto e um conjunto de definições regulares.
• Lexemas – são ocorrências de um token em um código fonte, também são chamados de átomos por alguns autores
Analisador Léxico
•
Analisador Léxico
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 119
Token Padrões Lexemas
if Caracteres i, f If
id Letras seguidas de letras e dígitos pi, nome, av1 number Qualquer constante numérica 10, 6.876,
6.32e10
literal Qualquer coisa entre “ “ “ texto” “exemplo”
comparação < ou > ou <= ou >= ou == ou != <=, !=
else Caracteres e,l,s,e else
Analisador Léxico
•
Analisador Léxico
•
Identifica
• Palavras reservadas
• Identificadores
• Operadores
• Símbolos especiais
• Constantes Numéricas
• Constante de Caracteres (Literais)
• Os componentes léxicos são os símbolos terminais de uma gramática
• Quando ele encontra um caractere que não faz parte do alfabeto da linguagem ele gera um erro.
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 120
Analisador Léxico
•
Analisador Léxico
•
Erros Léxicos
• Há duas possibilidades para ocorrer desses erros:
• O caractere não faz parte do alfabeto da linguagem
• Ex.:
α β ∞ ÷
• O usuário utilizou um caractere de forma indevida
• Correto if (x>10) then x + 10;
• Errado fi (x>10) then x + 10;
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 121
•
Analisador Léxico
•
Exemplo:
• X := Y + 100
Id Cod_Atrib Id Cod_Mais CTNum
X := Y + 100
Analisador Léxico
Tokens Lexemas
Analisador Léxico
•
Analisador Léxico
•
Formas de Recuperação de Erro
• Remover caractere estranho;
• Inserir caractere que faltam;
• Substituir caractere incorreto por correto;
• Trocar dois caracteres adjacentes.
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 123
The Compiling Process
Analisador Sintático
•
Analisador Sintático
• Analisa a estrutura de frases do programa
• Também chamado de Parser
• Recebe uma sequência de tokens do analisador léxico e determina se a string pode ser gerada através da gramática da linguagem fonte.
• É esperado que ele reporte os erros de uma maneira inteligível
• Deve se recuperar de erros comuns, continuando a processar a entrada
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 125
Linguagem e Gramática
• Como definir uma linguagem em computação?
• Temos que saber o que é:
• Alfabeto
• Palavra
• Gramática
Linguagem e Gramática
•
Gramática
•
Etimologia da palavra gra·má·ti·ca substantivo feminino
• 1. Estudo e tratado dos fatos de uma língua e das leis que a regem
• 2. Livro em que se acham expostas as regras da linguagem.
• Exemplo da Língua Português
• “ME DIGA UM NEGÓCIO!”;
• “ME FAÇA UM FAVOR!”;
• “ME AJUDE AQUI!”
• “VOCÊ OU VOCE”
• “VOCÊ NÃO QUER JANTAR? OU VOCÊ NÃO QUER JANTAR”
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 127
Linguagem e Gramática
•
Gramática
•
Etimologia da palavra gra·má·ti·ca substantivo feminino
• 1. Estudo e tratado dos fatos de uma língua e das leis que a regem
• 2. Livro em que se acham expostas as regras da linguagem.
• Exemplo da Língua Português
• “ME DIGA UM NEGÓCIO!”;
• “ME FAÇA UM FAVOR!”;
• “ME AJUDE AQUI!”
• “VOCÊ”
• “VOCÊ NÃO QUER JANTAR?
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 128
NÃO SE INICIA FRASE COM PRONOME OBLÍQUO, ou seja,
dizer/escrever:
DIGA-ME…;
FAÇA-ME…;
AJUDE-ME…;
DÊ-ME…
GRAMÁTICA
Linguagem e Gramática
•
Gramática
• gramática generativa
[Linguística] Gramática formal capaz de gerar o conjunto infinito das frases de uma língua por meio de um conjunto finito de regras.
•
Gramática Livre de Contexto ou GLC
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 129
Linguagem e Gramática
•
Gramática formal
• Gramática livre-do-contexto (GLC) é uma gramática formal em que cada regra de produção é da forma
V → w
• onde V é um único símbolo não-terminal(Variável),
• e w é uma cadeia de terminais e/ou variáveis (w pode ser a cadeia vazia).
Linguagem e Gramática
•
Gramáticas livres de contexto
• Desenvolvido por Noam Chomsky no meio dos anos 1950
• Geradores de linguagem, feitos para descrever a sintaxe de linguagens naturais
• Define uma classe de linguagens chamadas de livres de contexto
•
Forma de Backus-Naur (1959)
• Inventada por John Backus para descrever o Algol 58
• BNF é equivalente às gramáticas livres de contexto
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 131
Linguagem e Gramática
•
Linguagem formal livre de contexto (GLC);
• Define um conjunto de regras de formação de cadeias em uma linguagem.
• G = (V,T,P,S)
• V = Conjunto de Símbolos Não Terminais;
• T = Conjunto de Símbolos Terminais;
• P = Conjunto de Regras de Produção;
• S = Símbolo Inicial.
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 132
Linguagem e Gramática
•
Linguagem formal livre de contexto (GLC);
• G = (V,T,P,S)
• Onde:
• G é a gramatica ao qual deseja-se definir.
• Uma gramática é definida formalmente por uma quadrupla ordenada.
• Uma gramática formal é frequentemente chamada de um sistema de cadeia reescrito ou uma gramática irrestrita na literatura
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 133
Linguagem e Gramática
•
Linguagem formal livre de contexto (GLC);
• G – (V,T,P,S) 1º Elemento da Quadrupla
• V = Conjunto de Símbolos Não Terminais;
• Símbolos não-terminais, ou simplesmente não-terminais, são os símbolos que podem ser substituídos; portanto existem cadeias compostas por uma combinação de terminais e não-terminais símbolos.
Linguagem e Gramática
•
Linguagem formal livre de contexto (GLC);
• G – (V,T,P,S) – 2º Elemento da Quadrupla
• T = Conjunto de Símbolos Terminais;
• Símbolos terminais são caracteres literais que podem aparecer nas entradas ou saídas das regras de produção de uma gramática formal e não podem ser quebradas em unidades "menores“.
• "símbolos terminais" e "token e lexemas" são frequentemente tratados como sinônimos.
• São símbolos elementares da linguagem definida por uma gramática formal.
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 135
Linguagem e Gramática
•
Linguagem formal livre de contexto (GLC);
• G = (V,T,P,S) – 3º Elemento da Quadrupla
• P = Conjunto de Regras de Produção;
• É conjunto finito de pares denominados regras de produção (ou regras gramaticais) que relacionam os símbolos terminais e não-terminais;
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 136
Linguagem e Gramática
•
Linguagem formal livre de contexto (GLC);
• G = (V,T,P,S) – 4º Elemento da Quadrupla
• S = Símbolo Inicial.
• É o símbolo inicial da gramática pertencente aos não-terminais, a partir do qual as sentenças de uma linguagem podem ser geradas.
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 137
Linguagem e Gramática
•
Exemplo de (GLC);
• G = ( V, T, P, S)
• G = ({S,R}, {0,1}, P, S)
• P = { S 0S, S 1R, R 1R, R Ø }
V = Conjunto de Símbolos Não Terminais;
T = Conjunto de Símbolos Terminais;
P = Conjunto de Regras de Produção;
S = Símbolo Inicial.
Exemplo: Escrever as palavras 00111 e 11101 BNF
Exemplo: 011 S 0S | 1R
R
Fundamentos de BNF
•
Em BNF, abstrações são usadas para representar classes de estruturas sintáticas – elas agem como variáveis sintáticas (também chamadas de símbolos não terminais, ou simplesmente não terminais)
•
Uma regra tem um lado esquerdo (LHS), que é um não terminal, e um lado direito (RHS), que é uma cadeia de terminais e não terminais
• Exemplos das regras de BNF:
Lado Esquerdo LHS Lado Direito RHS
<ident_list> → identifier | identifier, <ident_list>
<if_stmt> → if <logic_expr> then <stmt>
Fundamentos de BNF
•
BNF é equivalente a gramáticas livre de contexto
•
BNF é uma metalinguagem usada para descrever outras linguagens
•
Em BNF, abstrações são usadas para representar classes de estruturas sintáticas
•
Agem como variáveis sintáticas (também chamadas de
símbolos não-terminais)
Fundamentos de BNF
•
Não-terminais: BNF abstrações
•
Terminais: lexemas e tokens
•
Gramática: uma coleção de regras
•
Exemplos de regras BNF:
<ident_list> → identifier | identifier, <ident_list>
<if_stmt> → if <logic_expr> then <stmt>
Abstrações
Regras de BNF
•
Uma abstração (ou símbolo não terminal) pode ter mais de um RHS
<stmt> <single_stmt> | begin <stmt_list> end
Uma Gramática de Atribuições Simples
• Exemplo:
• A = B * ( A+ C)
Derivação
•
Uma derivação é a aplicação de regras repetidas vezes, começando com um símbolo inicial e finalizando com uma sentença formada de símbolos terminais
BNF
•
Exemplo:
•
A = B * ( A+ C)
Derivação
•
Uma derivação é a aplicação de regras repetidas vezes, começando com um símbolo inicial e finalizando com uma sentença formada de símbolos terminais
• Exemplo:
• A = B * ( A+ C)
Assign <id> = <expr>
A = <expr>
A = <id>*<expr>
A = B * <expr>
A = B * (<expr>)
A = B * (<id> + <expr>)
A = B * (A + <expr.)
A = B * (A + <id>)
A = B * (A + C)
Parse Tree
• Árvore de Sintaxe Concreta ou Árvore de Análise ou Arvore de Derivação ou ainda (Parse Tree)
• É uma árvore que representa a sintaxe de forma estruturada de acordo com alguma gramática formal.
• Parse árvores são geralmente construídos de acordo com uma das duas relações concorrentes, quer em termos da relação eleitorado de gramáticas eleitorado
Árvore de análise sintática
•
Representação hierárquica de uma derivação
Parse Tree
• Árvore de Sintaxe Concreta ou Árvore de Análise (Parse Tree)
C
Assign <id> = <expr>
A = <expr>
A = <id>*<expr>
A = B * <expr>
A = B * (<expr>)
A = B * (<id> + <expr>)
A = B * (A + <expr.)
A = B * (A + <id>)
A = B * (A + C)
Exercício de Fixação
•
Dada a BNF, construa a:
•
Defina o conjunto de terminais da gramática
•
Defina o conjunto de não-terminais da gramática
•
Realize a derivação de
•
C = ( (A * B) + B)
•
C = ((A + B ) * (A * B))
•
C = (A + B ) * (B*(A+B))
•
Crie a Árvore de Análise dos Exemplos anterior (Parse Tree)
<expr> + < expr>
<expr> * < expr>
Exercício de Fixação
•
Dada a BNF:
•Defina o conjunto de terminais da gramática
•Defina o conjunto de não-terminais da gramática
<expression> | <indentifier>
| <number>
| <expression>
| <expression> <operator> <expression>
<indentifier> | a | b | c | x
<operator> | + | - | * | / | =
<number> | 0 |… | 9 | <number><number>