A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Analise sintática aula-07-analise-sintática.pdf.

Apresentações semelhantes


Apresentação em tema: "Analise sintática aula-07-analise-sintática.pdf."— Transcrição da apresentação:

1 Analise sintática aula-07-analise-sintática.pdf

2 Termos utilizados em linguagem de programação
Símbolo: são os elementos mínimos que compõe uma linguagem. Na linguagem humana são as letras. Sentença: É um conjunto ordenado de símbolos que forma uma cadeia ou string. Na linguagem humana são as frases. Alfabeto: É um conjunto de símbolos. Na linguagem humana é o conjunto de letras {a, b, c, d, ...} Linguagem: É o conjunto de sentenças, Na linguagem humana são os conjuntos de palavras {compiladores, linguagem, ...} Gramática: É uma forma de representar as regras para formação de uma linguagem.

3 Analise sintática O que é sintaxe? Parte da gramática que estuda a disposição das palavras na frase e das frases no discurso, bem como a relação lógica das frases entre si. (AURELIO, 2004). É a segunda fazer do processo de compilação e sua função é verificar se as construções utilizadas no programa estão gramaticalmente corretas. As estruturas sintáticas ou gramaticais podem ser especificadas através das Gramaticas Livres de Contexto -GLC.

4 Analise sintática Dada uma GLC “G” e uma sentença “s” o objetivo do analisador sintático é verificar se a sentença “s” pertence a linguagem “G”. O analisador sintático também é conhecido como parser e recebe do analisador léxico a sequência de tokens que constitui a sentença “s” A analise sintática produz uma árvore de derivação se a sentença é válida ou emite um erro sintático. O analisador sintático deve ser projetado para que a análise seja feita até o fim do programa mesmo que encontre erros no texto do programa fonte.

5 Analise sintática Duas estratégias para implementar a analise sintática. Top-down ou descendente: constrói a árvore de derivação a partir do símbolo inicial da gramatica fazendo a árvore crescer até as suas folhas. Bottom-up ou ascendente: Faz a análise no sentido inverso, ou seja, constrói a árvore de derivação das folhas até o símbolo inicial da gramatica.

6 Analise sintática - processo
O analisador léxico é desenvolvido para reconhecer os tokens fazendo uma leitura dos caracteres e obtendo sequencia de tokens. O analisador léxico vê o texto como uma sequência de palavras de uma linguagem regular e reconhece ele através de um autômato finito ou expressão regular. Já o analisador sintático vê o mesmo texto como uma sequência de sentenças que deve satisfazer as regras gramaticais. É através da gramatica que podemos validar expressões criadas na linguagem de programação. O analisador sintático agrupa os tokens em frases gramaticais usadas pelo compilador com o objetivo de criar uma saída que é uma estrutura de dados que possui a hierarquia da entrada a árvore de derivação.

7 Analise sintática - processo
Exemplo de uma árvore de derivação.

8 Analise sintática - processo
Estrutura sintática de um código fonte

9 Analise sintática - processo
Entende-se por regras gramaticas as formas como podemos descrever a estrutura sintática do programa. No modelo de compilador que está sendo estudado o analisador sintático recebe do analisador léxico uma cadeia de tokens representado o programa fonte. O analisador sintático verifica se essas cadeias pertencem a linguagem definhada pela gramatica. Veja um exemplo no diagrama abaixo demostrando esse processo.

10 Analise sintática - processo

11 Analise sintática - processo

12 Analise sintática - processo
Descubra os erros sintáticos da seguinte expressão 01 private static Integer maior(Integer numero01 Integer numero02) { 02 if (numero01 > numero02) { 03 return numero01 04 } else { 05 return numero02; 06 07 }

13 Gramatica livre de contexto
A Gramatica Livre de Contexto ajuda a especificar a sintaxe de uma linguagem. A GLC é a base para a análise sintática das linguagens de programação e permitem descrever a maioria das linguagens de programação usadas atualmente. Uma gramatica descreve naturalmente como é possível fazer construções em linguagem de programação. Veja o exemplo de um comando if-else em Pascal que deve ter a seguinte forma if (expressão) then declaração else declaracao ;

14 Gramatica livre de contexto
Essa mesma forma em uma Gramatica Livre de Contexto pode ser expressada da seguinte maneira: declaracao → if ( expressao ) then declaracao else declaracao; expressao → id > id declaracao → ... ...

15 Gramatica livre de contexto
As linguagens regulares podem ser reconhecidas através de expressões regulares criando um analisador léxico (exemplo JFlex). Uma linguagem livre de contexto pode ser reconhecida autômatos de pilha que a descrevem a forma como podemos criar analisadores sintáticos (exemplo JCUP).

16 Gramatica livre de contexto
A definição de uma gramatica livre de contexto pode ser representada da seguinte forma: G = (N, T, P, S) Onde: N – Conjunto finito de símbolos não terminais. T – Conjunto finito de símbolos terminais. P – Conjunto de regras de produções. S – Símbolo inicial da gramatica

17 Gramatica livre de contexto
Terminologias: Símbolos terminais: símbolos básicos que formas as cadeias, são os tokens da linguagem de programação. Símbolos não terminais: variáveis sintáticas utilizadas para auxiliar a definição da linguagem, são compostas de símbolos terminas e pelos próprios símbolos não terminais. Regras de produções: regras sintáticas que indicam como símbolos terminais e não terminais podem ser combinados. Símbolo inicial: Inicio da validação da produção representado por um símbolo não terminal.

18 Gramatica livre de contexto
Derivações: É a substituição das setnteças iniciando pelo símbolo inicial substituindo os símbolos não terminais pelos símbolos terminais. Tipos de derivação: Mais à esquerda: trocamos os símbolos não terminais mais à esquerda. Mais à direita: trocamos os símbolos não terminais mais a direita

19

20 Derivações: É a substituição das setnteças iniciando pelo símbolo inicial substituindo os símbolos não terminais pelos símbolos terminais. Tipos de derivação: Mais à esquerda: trocamos os símbolos não terminais mais à esquerda. Mais à direita: trocamos os símbolos não terminais mais a direita Exemplos

21 Linguagem de programação ab
Definindo a gramatica da linguagem G = ( {LITERAL}, {a, b}, PALAVRA, LITERAL ) Definindo a regra de produção PALAVRA { LITERAL → aLITERALb | Ø } Identificando as terminologias Linguagem de programação ab Símbolos terminais a e b Símbolos não terminais: LITERAL Símbolo inicial: Regra de produção: PALAVRA Derivação a direita para saber se aabb fazer parte da linguagem LITERAL → aLITERALb LITERAL → aaLITERALbb LITERAL → aaØbb Com a gramática acima é possível dizer que palavra aab da linguagem?

22 Expressões matemáticas soma e multiplicação
Definindo a gramatica da linguagem G = ( {EXP }, { +, *, (, ), x }, OPR, EXP) Definindo a regra de produção OPR { EXP → EXP + EXP | EXP * EXP | (EXP) | x } Expressões matemáticas soma e multiplicação Identificando as terminologias Símbolos terminais + , *, (, ), x Símbolos não terminais: EXP Símbolo inicial: Regra de produção: OPR

23 Expressões matemáticas soma e multiplicação
Derivação a direita para saber se a expressão (x + x) * x fazer parte da linguagem EXP → EXP * EXP EXP → (EXP) * EXP EXP → (EXP + EXP) * EXP EXP → (x + EXP) * EXP EXP → (x + x) * EXP EXP → (x + x) * x Expressões matemáticas soma e multiplicação OPR { EXP → EXP + EXP | EXP * EXP | (EXP) | x } Com a gramática acima é possível dizer que x - x é uma expressão valida?

24 Expressões matemáticas soma e multiplicação completo
Definindo a gramatica da linguagem G = ({EXP, OP}, {+, *, +, -, (, ), id, numero}, OPR, EXP) Definindo a regra de produção OPR { EXP → EXP OP EXP | (EXP) | -EXP | id | numero OP → + | - | * | / } Expressões matemáticas soma e multiplicação completo Identificando as terminologias Símbolos terminais + , *, (, ), x, +, -, id, numero Símbolos não terminais: EXP, OP Símbolo inicial: EXP Regra de produção: OPR

25 Expressões matemáticas soma e multiplicação completo
Derivação a direita para saber se a expressão a + b fazer parte da linguagem EXP → EXP OP EXP EXP → EXP OP id EXP → EXP + id EXP → id OP id EXP → id + id Expressões matemáticas soma e multiplicação completo OPR { EXP → EXP OP EXP | (EXP) | -EXP | id | numero OP → + | - | * | / } Com a gramática acima é possível dizer que qualquer expressão matemática é uma expressão valida?

26 Expressões matemáticas soma e multiplicação completo
Derivação a direita para saber se a expressão -1 fazer parte da linguagem EXP → OP EXP EXP → OP numero EXP → - numero Expressões matemáticas soma e multiplicação completo OPR { EXP → EXP OP EXP | (EXP) | -EXP | id | numero OP → + | - | * | / } Com a gramática acima é possível dizer que qualquer expressão matemática é uma expressão valida?

27 Dicas para criar uma gramatica livre de contexto
Conhecer todos os tokens. Criar a regra de produção. Especificar a gramatica. Ex: G = ( {A, B, C}, {int, id, numero, +, -}, P, A ) Fazer a derivação.

28 Exercícios seção 5


Carregar ppt "Analise sintática aula-07-analise-sintática.pdf."

Apresentações semelhantes


Anúncios Google