22

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

Embed Size (px)

Citation preview

Page 1: 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
Page 2: 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
Page 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

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?

Page 4: 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

E como definir tais regras?

Através de produções: Ex: Uma calculadora

E T | T + E | T - E

T F | F * T | F / T

F Número | ( E )

Page 5: 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

E o que mais um analisador sintático pode fazer?

•Detecção de Erros de Sintaxe

•Recuperação de Erros

Page 6: 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

Estratégia para recuperação de erros utilizadas neste analisador:

Considere a seguinte gramática:

S a ( b | Sc) | dM | e

M fM*

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.

Page 7: 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

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:

Page 8: 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

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.

Page 9: 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
Page 10: 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
Page 11: 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

Como definimos as produções?

Agora, em um grafo sintático

S a ( b | Sc) | dM | e

M fM*

Forma original:

Page 12: 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

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

Page 13: 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

Exemplos: A velha calculadora

Primeira Abordagem:

Page 14: 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

E as rotinas semânticas? Aonde estão?

As rotinas semânticas são declaradas em um arquivo especial,(SemanticRoutines.java)

Page 15: 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

Segunda Abordagem:

Page 16: 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

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

Page 17: 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

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

Page 18: 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

Pilha sintática:

Page 19: 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

Saida das rotinas semânticas:

Saida do analisador léxico:

Page 20: 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

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

Page 21: 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
Page 22: 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

Documentação completa, incluindo referências bibliográficas e o futuro do plugin, localiza-se em :

www.linux.ime.usp.br/~chaos/DocAsin