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

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

Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso.

Apresentações semelhantes


Apresentação em tema: "Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso."— Transcrição da apresentação:

1 Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso

2 Aula 12 2 Vocabulário gramatical Derivação à esquerda (Leftmost) Expandir sempre o símbolo não terminal mais à esquerda que resta Derivação à direita (Rightmost) Expandir sempre o símbolo não terminal mais à direita que resta Aplicar primeiro a produção aqui NT 1 T 1 T 2 T 3 NT 2 NT 3 E só depois aos outros símbolos não-terminais

3 Aula 12 3 Ponto Inicial Assumir que a análise lexical produziu uma sequência de tokens (símbolos terminais) Cada token tem um tipo e um valor Tipos correspondem a símbolos terminais Valores correspondem ao conteúdo do token lido Exemplo INT(549) – token que identifica um inteiro de valor lido 549 IF – palavra chave “if” sem necessidade de valor OP(+) – operador com valor +

4 Aula 12 4 Abordagem Básica Começar pelo símbolo Start ou pela primeira produção Construir uma derivação leftmost Se o símbolo leftmost é não-terminal, seleccionar uma produção e aplicá-la Se o símbolo leftmost é terminal, fazer corresponder com a entrada Se todos os terminais foram correspondidos, foi encontrada uma derivação que aceita a String! Chave: encontrar as produções correctas para os símbolos não-terminais

5 Aula 12 5 Gramática do Exemplo INT = [0-9]+ Start  Expr Expr  Expr “+” Term Expr  Expr “-” Term Expr  Term Term  Term “*” INT Term  Term “/” INT Term  INT Conjunto de tokens (símbolos terminais): { +, -, *, /, INT }

6 Aula 12 6 Analisador Sintáctico para a gramática exemplo Start Árvore Sintáctica Posição corrente na árvore sintáctica Forma sentencial Entrada que falta 2-2*2 Start

7 Aula 12 7 Analisador Sintáctico para a gramática exemplo Start Árvore Sintáctica Forma sentencial Entrada que falta 2-2*2 Expr Posição corrente na árvore sintáctica Expr Produção Aplicada Start  Expr

8 Aula 12 8 Analisador Sintáctico para a gramática exemplo Start Árvore Sintáctica Forma sentencial Entrada a faltar 2-2*2 Expr - Term Expr Produção Aplicada Expr  Expr - Term Term Expr-

9 Aula 12 9 Analisador Sintáctico para a gramática exemplo Start Árvore Sintáctica Forma sentencial Entrada que falta 2-2*2 Term - Term Expr Produção Aplicada Expr  Term Term Expr- Term

10 Aula 12 10 Analisador Sintáctico para a gramática exemplo Start Árvore Sintáctica Forma sentencial Entrada que falta 2-2*2 INT - Term Expr Produção Aplicada Term  INT Term Expr- INT Term

11 Aula 12 11 Analisador Sintáctico para a gramática exemplo Start Árvore Sintáctica Forma sentencial Entrada que falta 2-2*2 2 - Term Expr Term Expr- INT 2 Term Token corresponde!

12 Aula 12 12 Analisador Sintáctico para a gramática exemplo Start Árvore Sintáctica Forma sentencial Entrada que falta -2*2 2 - Term Expr Term Expr- INT 2 Term Token corresponde!

13 Aula 12 13 Analisador Sintáctico para a gramática exemplo Start Árvore Sintáctica Forma sentencial Entrada que falta 2*2 2 - Term Expr Term Expr- INT 2 Term

14 Aula 12 14 Analisador Sintáctico para a gramática exemplo Start Árvore Sintáctica Forma sentencial Entrada que falta 2*2 2 – Term*INT Expr Term Expr- INT 2 Term INT * Produção Aplicada Term  Term * INT

15 Aula 12 15 Analisador Sintáctico para a gramática exemplo Start Árvore Sintáctica Forma sentencial Entrada que falta 2*2 2 – INT*INT Expr Term Expr- INT 2 Term INT * Produção Aplicada Term  INT INT

16 Aula 12 16 Analisador Sintáctico para a gramática exemplo Start Árvore Sintáctica Forma sentencial Entrada que falta 2*2 2 – 2*INT Expr Term Expr- INT 2 Term INT * INT 2 Token corresponde!

17 Aula 12 17 Analisador Sintáctico para a gramática exemplo Start Árvore Sintáctica Forma sentencial Entrada que falta *2 2 – 2*INT Expr Term Expr- INT 2 Term INT * INT 2 Token corresponde!

18 Aula 12 18 Analisador Sintáctico para a gramática exemplo Start Árvore Sintáctica Forma sentencial Entrada que falta 2 2 – 2*INT Expr Term Expr- INT 2 Term INT * INT 2

19 Aula 12 19 Analisador Sintáctico para a gramática exemplo Start Árvore Sintáctica Forma sentencial Entrada que falta 2 2 – 2*2 Expr Term Expr- INT 2 Term INT 2 * Token corresponde!

20 Aula 12 20 Analisador Sintáctico para a gramática exemplo Start Árvore Sintáctica Forma sentencial Entrada que falta 2 – 2*2 Expr Term Expr- INT 2 Term INT 2 * Análise sintáctica terminou

21 Aula 12 21 Sumário Três acções (mecanismos) Aplicar produção para expandir o símbolo não-terminal corrente na árvore sintáctica Casar o símbolo terminal corrente Aceitar a análise sintáctica como correcta Qual a produção a utilizar por cada símbolo não-terminal? Uma abordagem: Backtracking Tenta uma alternativa Quando for claro que a alternativa falhou tentar outra alternativa

22 Aula 12 22 Analisador Sintáctico Preditivo Alternativa ao backtracking Muito útil para linguagens de programação, que podem ser desenhadas para facilitar a análise Ideia básica Ver à frente na sequência de tokens Decisão de qual a produção a aplicar baseada nos tokens seguintes Utilizaremos a profundidade de um token no mecanismo de ver à frente

23 Aula 12 23 Gramática Exemplo Start  Expr Expr  Term Expr’ Expr’  “+” Term Expr’ Expr’  “-” Term Expr’ Expr’   Term  INT Term’ Term’  “*” INT Term’ Term’  “/” INT Term’ Term’   INT = [0-9]+ Conjunto de tokens (símbolos terminais): { +, -, *, /, INT }

24 Aula 12 24 Pontos de Escolha Assumir que Term’ é a posição corrente na árvore sintáctica 3 produções diferentes a aplicar Term’  “*” INT Term’ Term’  “/” INT Term’ Term’   Utilizar o próximo token para decidir Se o próximo token for *, aplicar Term’  * Int Term’ Se o próximo token for /, aplicar Term’  / Int Term’ De outro modo, aplicar Term’  

25 Aula 12 25 Múltiplas Produções com o mesmo prefixo no RHS Gramática Exemplo Nt  IF THEN Nt  IF THEN ELSE Assumir que Nt é a posição corrente na árvore sintáctica e IF é o próximo token Qual a produção a aplicar?

26 Aula 12 26 Solução: factorizar a gramática à esquerda Nova gramática factoriza o prefixo comum numa única produção Nt  IF THEN Nt’ Nt’  ELSE Nt’   Nenhuma escolha quando o próximo token é um IF Todas as alternativas foram unificadas numa única produção

27 Aula 12 27 Símbolos não-terminais E as produções com símbolos não- terminais? Nt  Nt 1  1 Nt  Nt 2  2 Tem de se escolher com base nos primeiros terminais possíveis que Nt 1 e Nt 2 podem gerar E se Nt 1 ou Nt 2 podem gerar  ? Tem de se escolher com base em  1 e  2


Carregar ppt "Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso."

Apresentações semelhantes


Anúncios Google