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

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

III – Análise sintáctica

Apresentações semelhantes


Apresentação em tema: "III – Análise sintáctica"— Transcrição da apresentação:

1 III – Análise sintáctica
DEI Parsers descendentes recursivos Parsers predictivos Bibliografia aconselhada: Aho, Sethi e Ullman – secção 4.4 Crespo – secção 4.3 Jorge Morais LFA 1999/

2 Parser descendente recursivo
DEI Um parser descendente recursivo pode ser construído da seguinte forma: Cada variável (símbolo não terminal) do lado esquerdo duma produção corresponderá à definição duma função. Cada token (símbolo terminal) no lado direito corresponde à sua verificação e pedido de novo token ao analisador léxico Cada variável do lado direito corresponde à chamada da função correspondente Jorge Morais LFA 1999/

3 Parser predictivo DEI Um parser descendente diz-se predictivo se para cada par (variável, token) só existe uma única alternativa a considerar A eliminação da recursividade à esquerda e a factorização à esquerda permitem a definição duma gramática que permite a construção de parsers predictivos Estas gramáticas são do tipo LL(1) Jorge Morais LFA 1999/

4 Exemplo DEI E  T E’ E’  + T E’ | - T E’ |  T  F T’ T’  * F T’ | / F T’ |  F  ( E ) | id Jorge Morais LFA 1999/

5 Exemplo – função e( ) DEI /* E  T E’ */ e( ) { t( ); e2( ); }
Jorge Morais LFA 1999/

6 Exemplo – função e2( ) DEI /* E’  + T E’ | - T E’ |  */ e2( ) {
if(token = = MAIS || token = = MENOS){ token = next_token( ); t( ); e2( ); } Jorge Morais LFA 1999/

7 Exemplo – função t( ) DEI /* T  F T’ */ t( ) { f( ); t2( ); }
Jorge Morais LFA 1999/

8 Exemplo – função t2( ) DEI /* T’  * F T’ | / F T’ |  */ t2( ) {
if(token = = VEZES || token = = DIV){ token = next_token( ); f( ); t2( ); } Jorge Morais LFA 1999/

9 Exemplo – função f( ) DEI /* F  ( E ) | id */ f( ) {
if(token= =PAR_ESQ){ token = next_token( ); e( ); if(token= =PAR_DIR) token=next_token( ); else erro(F_PAR_DIR);} else if(token = = ID) else erro(PROD_F); } Jorge Morais LFA 1999/

10 Exemplo – outras funções
DEI next_token() – retorna próximo token erro(int n) { switch(n){ case F_PAR_DIR: puts(“Falta parentesis direito”); break; } Jorge Morais LFA 1999/

11 Exemplo 2 DEI Definição da chamada duma função
ChamaFunc  ID ( ListaExpr ) ListaExpr  ListaExpr , Expr | Expr Eliminando a recursividade à esquerda ListaExpr  Expr ListaExpr’ ListaExpr’  , Expr ListaExpr’ |  Jorge Morais LFA 1999/

12 Exemplo – função chamafunc( )
DEI /* ChamaFunc  ID ( ListaExpr )*/ chamafunc ( ) { if(token != ID) erro(ERR_ID); else token = next_token( ); if(token != PAR_ESQ) erro(F_PAR_ESQ); else token=next_token( ); listaexpr(); if(token != PAR_DIR) erro(F_PAR_DIR); } Jorge Morais LFA 1999/

13 Exemplo – função listaexpr( )
DEI /* ListaExpr  Expr ListaExpr’ */ listaexpr( ) { expr(); listaexpr2(); } Jorge Morais LFA 1999/

14 Exemplo – função listaexpr2( )
DEI /* ListaExpr’  , Expr ListaExpr’ |  */ listaexpr2() { if(token = = VIRG){ token = next_token(); expr( ); listaexpr2( ); } Jorge Morais LFA 1999/


Carregar ppt "III – Análise sintáctica"

Apresentações semelhantes


Anúncios Google