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. TERMOS UTILIZADOS EM LINGUAGEM DE PROGRAMAÇÃO Símbolo: são os elementos mínimos que compõe uma linguagem.

Apresentações semelhantes


Apresentação em tema: "ANALISE SINTÁTICA aula-07-analise-sintática.pdf. TERMOS UTILIZADOS EM LINGUAGEM DE PROGRAMAÇÃO Símbolo: são os elementos mínimos que compõe uma linguagem."— 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

12 Descubra os erros sintáticos da seguinte expressão 01private static Integer maior(Integer numero01 Integer numero02) { 02if (numero01 > numero02) { 03return numero01 04} else { 05return 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 EXEMPLOS 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

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 Símbolos terminaisa e b Símbolos não terminais:LITERAL Símbolo inicial:LITERAL 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 } Identificando as terminologias Símbolos terminais +, *, (, ), x Símbolos não terminais: EXP Símbolo inicial: EXP 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 Com a gramática acima é possível dizer que x - x é uma expressão valida? OPR { EXP → EXP + EXP | EXP * EXP | (EXP) | x }

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 → + | - | * | / } 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 Com a gramática acima é possível dizer que qualquer expressão matemática é uma expressão valida? OPR { EXP → EXP OP EXP | (EXP) | -EXP | id | numero OP → + | - | * | / }

26 EXPRESSÕES MATEMÁTICAS SOMA E MULTIPLICAÇÃO COMPLETO Com a gramática acima é possível dizer que qualquer expressão matemática é uma expressão valida? OPR { EXP → EXP OP EXP | (EXP) | -EXP | id | numero OP → + | - | * | / } Derivação a direita para saber se a expressão -1 fazer parte da linguagem EXP → OP EXP EXP → OP numero EXP → - numero

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. TERMOS UTILIZADOS EM LINGUAGEM DE PROGRAMAÇÃO Símbolo: são os elementos mínimos que compõe uma linguagem."

Apresentações semelhantes


Anúncios Google