• Nenhum resultado encontrado

Linguagem e Gramática

N/A
N/A
Protected

Academic year: 2022

Share "Linguagem e Gramática"

Copied!
20
0
0

Texto

(1)

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

(2)

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

(3)

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

(4)

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

(5)

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

(6)

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

(7)

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

(8)

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

(9)

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

(10)

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).

(11)

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

(12)

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.

(13)

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

(14)

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 

(15)

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)

(16)

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

(17)

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)

(18)

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

(19)

Á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)

(20)

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>

Referências

Documentos relacionados

Maior produção de parte aérea e qualidade das plantas foram obtidas para todas as variedades quando o amônio se fez presente na solução nutritiva em torno de

tricolor por apresentar o corpo mais delgado e longo, cabeça mais larga na altura dos olhos e focinho mais largo; capuz cefálico preto com focinho avermelhado escurecido de preto;

O reator de leito fluidizado trifãsico aeróbio mostrou um grande potencial para o tratamento de efluentes sanitários, uma vez que apresentou boa eficiência em termos de

100884 DIEGO ANTONIO SANTA BRIGIDA DA COSTA REIS 01242631275 Indeferido Descumprimento do Capítulo V; Item 6.. Inscrição Nome Documento

primeira hora de trabalho e antes da penúltima hora da jornada, mediante escala determinada pela empresa ou de comum acordo entre os vigilantes de um mesmo estabelecimento,

RESUMO: Estudaram-se 450 escolares da periferia de Londrina, PR, Brasil, com o objetivo de demonstrar uma possível associação entre desnutrição e aproveitamento escolar. A incidência

O último Programa Nacional de Petroquímica (PNP), elaborado pelo CDI, foi de 1987. O PNP foi baseado originalmente numa previsão de crescimento da demanda de, em média, 7% ao ano,

Para entender sobre a estrutura das funções sintáticas, é preci- so conhecer as classes de palavras, também conhecidas por classes morfológicas. A gramática tradicional pressupõe