Analisador sintático - compiladores
02/10/2012
Árvore de Análise Sintática
Árvore de Análise Sintática
Análise Semântica
Análise Semântica
Tokens
Tokens
Análise
Léxica
Análise
Léxica
Análise Sintática
Análise Sintática
Gerador de Código
Gerador de Código
Arquivo de Saída
Arquivo de Saída
Arquivo-Fonte
Arquivo-Fonte
COMPILADOR
COMPILADOR
Analisador Sintático de Descendência Recursiva
E TE’
E’+TE’|ɛ
T FT’
T’*FT’| ɛ
F (E)|id
int le_token(); int token; void E(){ T(); E_linha();
}
void E_linha(){ token=le_token(); if(token==”+”){ T(); E_linha(); }else{retrocede();}
}
void T(){ F(); T_linha();
}
void T_linha(){ token=le_token(); if(token==”*”){ F(); T_linha(); }else{ retocede(); }
}
void F(){ token=le_token(); if(token==”(“){ E(); token=le_token(); }else if(token == ID){ }
}
int main(){ E(); return 0;
}
Eliminação de Recursividade à Esquerda Uma gramática é recursiva à esquerda se existe uma derivação de tal forma: A => Aα para alguma cadeia α. Considerando par de produçãoes A->Aα|β , podemos substituí-la pela seguinte produção não-recursiva:
A βA’
A’αA’|ɛ
A mesma regra é aplicada se existirem mais de uma produção A: A Aα1|Aα2|...|Aαn|β1| β2| ...| βn ↓ A β1A’| β2A’|...| βnA’ A’ α1A’| α2A’|...| αnA’| ɛ
Ex.: EE+T|E-T|T TT*F|T/F|F F(E)|id
1) SS(S)S| ɛ 2) SS+S|SS|(S)|S*|α
30/10/2012
Código de Três Endereços
Existe no máximo um operador no lado direito de uma instrução, ou seja, nenhuma expressão aritmética com vários operadores é permitida. Ex.: Expressão Nominal: w = x + y * z t0 = y * z w = x + t0 Como o nome já diz "três endereços" é o máximo de variáveis por instrução por isso a tradução acima.
Endereços podem ser: * Um identificador: variável * Uma constante: um número, caracter, etc;