Carregar apresentação
A apresentação está carregando. Por favor, espere
1
III – Análise sintáctica
DEI Papel do analisador sintáctico Diagnóstico e recuperação de erros Uso de gramáticas independentes de contexto Bibliografia aconselhada: Aho, Sethi e Ullman – secções 4.1 e 4.2 Appel – secção 3.1 Jorge Morais LFA 1999/
2
Papel do analisador sintáctico
DEI Jorge Morais LFA 1999/
3
Tipos de analisadores sintácticos
DEI Parsers universais: reconhecem todas as gramáticas independentes de contexto mas são ineficientes Parsers descendentes (Top-Down): reconhecimento feito da raíz para as folhas Parsers ascendentes (Bottom-Up): reconhecimento feito das folhas para a raíz Jorge Morais LFA 1999/
4
Tipos de gramáticas DEI
A maioria dos métodos trabalham apenas com subclasses de gramáticas, mas são suficientemente expressivas Gramáticas LL(k) (Left-to-right parse, Leftmost-derivation, k-token lookahead): mais usado para parsers implementados directamente Gramáticas LR(k) (Left-to-right parse, Rightmost-derivation, k-token lookahead): mais usado com ferramentas automáticas Jorge Morais LFA 1999/
5
Erros sintácticos DEI A maioria dos erros no código fonte são erros sintácticos Erros frequentes: Tecla de shift Carácter em falta ou em excesso Chavetas encadeadas Erros resultantes de outros: variáveis mal declaradas não entram na tabela de símbolos Jorge Morais LFA 1999/
6
Estratégias de recuperação
DEI Modo de pânico: eliminar tokens até chegar a um de sincronização (delimitadores como ‘;’ e ‘}’); uma recuperação por instrução. Recuperação ao nível da frase: substituição, adição e remoção de caracteres para tentar encontrar um frase correcta; má quando os erros ocorrem antes Jorge Morais LFA 1999/
7
Estratégias de recuperação (cont.)
DEI Produções de erros: aumentar a gramática com os erros sintácticos mais comuns Correcção global: fazer o número mínimo de alterações possíveis; enorme custo em termos de tempo e espaço Jorge Morais LFA 1999/
8
Estruturas sintácticas
DEI Uso de gramáticas independentes de contexto: facilidade de construção, recursividade e clareza Uma instrução do tipo if-then-else pode ser definida recursivamente: Se E é uma expressão e I1 e I2 são instruções então “if E then I1 else I2” é uma instrução Inst if Expr then Inst else Inst Jorge Morais LFA 1999/
9
Exemplo: expressão aritmética
DEI Expr Expr Op Expr | PAR_ESQ Expr PAR_DIR | MENOS Expr | ID Op MAIS | MENOS | MULT | DIV Notação simplificada (quando um token tem um único lexema substitui-se pelo lexema): Expr Expr Op Expr | ( Expr ) | - Expr | ID Op + | - | * | / Jorge Morais LFA 1999/
10
Derivação de x * (y + z) DEI
Expr Expr Op Expr ID Op Exp ID * Expr ID * ( Expr ) ID * ( Expr Op Expr ) ID * ( ID Op Expr ) ID * ( ID + Expr) ID * ( ID + ID ) A cada ID corresponde um endereço na tabela de símbolos Jorge Morais LFA 1999/
11
Árvore de derivação de x*(y+z)
DEI Jorge Morais LFA 1999/
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.