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

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

Mas para que serve um analisador sintático? Verificar se a estrutura gramatical do programa está correta Escrito de outra forma: O texto segue as regras.

Apresentações semelhantes


Apresentação em tema: "Mas para que serve um analisador sintático? Verificar se a estrutura gramatical do programa está correta Escrito de outra forma: O texto segue as regras."— Transcrição da apresentação:

1

2

3 Mas para que serve um analisador sintático? Verificar se a estrutura gramatical do programa está correta Escrito de outra forma: O texto segue as regras gramaticais da linguagem?

4 E como definir tais regras? Através de produções: Ex: Uma calculadora ET | T + E | T - E TF | F * T | F / T FNúmero | ( E )

5 E o que mais um analisador sintático pode fazer? Detecção de Erros de Sintaxe Recuperação de Erros

6 Estratégia para recuperação de erros utilizadas neste analisador: Considere a seguinte gramática: Sa ( b | Sc) | dM | e MfM* 1º) Remoção de um símbolo: O analisador sintático supõe que o usuário digitou um símbolo extra. Por exemplo, considere o seguinte texto de entrada: a a d f g e c c. Esse texto não segue as regras definidas pela gramática acima. Entretando o texto: a a d f e c c segue. Então o analisador remove o caractere ‘g’ do texto original, fazendo com que a string resultante seja reconhecido.

7 2º) Inserção de um símbolo: Nessa estratégia, o analisador sintático supõe que o usuário esqueceu de digitar um símbolo. Neste caso, o analisador tenta encontrar um símbolo que, quando inserido no texto a string resultante seja reconhecida. Por exemplo, a entrada é: d f b. Como podemos notar, essa entrada não pode ser gerada com as regras definidas pela gramática. Mas o texto d f a b pode. Então o analisador insere o símbolo ‘a’ no texto original. Agora o analisador supõe que o usuário trocou um símbolo por um outro. Por exemplo, o texto: a g f e c não pode ser gerado a partir da gramática. Mas o texto a d f e c pode. Então o analisador substitui o símbolo ‘g’ pelo símbolo ‘d’. 3º) Troca de um símbolo:

8 4º) Busca de delimitadores: Se o texto ‘a c’ for analisado, nenhuma das estratégias anteriores conseguirão ‘consertar’ a string. Mas note que sempre que reconhecemos um terminal a, teremos duas possibilidades: ou reconhecer um terminal b, ou reconhecer um não-terminal S. Nesse caso, o terminal b não foi encontrado, mas sim o terminal c. Mas a S c pode ser gerado pela gramática. O analisador então ‘supõe’ que o não- terminal S foi reconhecido antes de reconhecer o caractere ‘c’. (delimitador para S) E se nenhuma estratégia funcionar? O simbolo atual é ignorado.

9

10

11 Como definimos as produções? Agora, em um grafo sintático Sa ( b | Sc) | dM | e MfM* Forma original:

12 E quais são as opções deste plugin? 1º) Gerar a gramática a partir de um grafo sintático. 2º) Fazer a análise sintática de um código fonte. 3º) Gerar o analisador em um arquivo.java

13 Exemplos: A velha calculadora Primeira Abordagem:

14 E as rotinas semânticas? Aonde estão? As rotinas semânticas são declaradas em um arquivo especial, (SemanticRoutines.java)

15 Segunda Abordagem:

16 Utilizando o método parse, podemos ter as seguintes saidas: 1) Pilha Semântica 2) Pilha Sintática 3) Saida gerada pelas rotinas sintáticas 4) Saida gerada pelas rotinas de recuperação de erros 5) Saida gerada pelo analisador léxico

17 Código fonte: (-1 + (-5) + 6 + (2 * (4+6)) / 4), pilha semântica:

18 Pilha sintática:

19 Saida das rotinas semânticas: Saida do analisador léxico:

20 E a saida das rotinas de recuperação de erros?

21

22 Documentação completa, incluindo referências bibliográficas e o futuro do plugin, localiza-se em : www.linux.ime.usp.br/~chaos/DocAsin


Carregar ppt "Mas para que serve um analisador sintático? Verificar se a estrutura gramatical do programa está correta Escrito de outra forma: O texto segue as regras."

Apresentações semelhantes


Anúncios Google