CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

36
CES-41 CES-41 COMPILADORES COMPILADORES Capítulo II Capítulo II Gramáticas e Gramáticas e Linguagens Linguagens

Transcript of CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

Page 1: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

CES-41 CES-41 COMPILADORESCOMPILADORES

Capítulo IICapítulo II

Gramáticas e Gramáticas e LinguagensLinguagens

Page 2: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

Capítulo II – Capítulo II – Gramáticas e Gramáticas e LinguagensLinguagens

2.1 – Gramáticas e linguagens de 2.1 – Gramáticas e linguagens de programaçãoprogramação

2.2 – Gramáticas livres de contexto2.2 – Gramáticas livres de contexto

2.3 – GLC’s ambíguas2.3 – GLC’s ambíguas

2.4 – GLC’s recursivas à esquerda2.4 – GLC’s recursivas à esquerda

Page 3: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

2.1 – Gramáticas e 2.1 – Gramáticas e Linguagens de Linguagens de ProgramaçãoProgramação

As linguagens de programação conhecidas As linguagens de programação conhecidas não não são livres de contextosão livres de contexto

Exemplo: Exemplo: seja a linguagemseja a linguagem

L = {w c w | w Є (a | b)*}L = {w c w | w Є (a | b)*}

onde ∑ = {a, b, c}onde ∑ = {a, b, c}

Sentença típica: Sentença típica: aababcaababaababcaabab

Page 4: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

L = {w c w | w Є (a | b)*}L = {w c w | w Є (a | b)*}

onde ∑ = {a, b, c}onde ∑ = {a, b, c} Sentença típica: Sentença típica: aababcaababaababcaabab

A linguagem é uma A linguagem é uma simplificaçãosimplificação daquelas daquelas que exigem a que exigem a declaraçãodeclaração de todo de todo identificadoridentificador antes de ser antes de ser usadousado

A primeira ocorrência de A primeira ocorrência de aababaabab representa representa sua sua declaraçãodeclaração e a segunda, seu e a segunda, seu usouso

A letra A letra c c representa a separação entre representa a separação entre declaraçõesdeclarações e e comandos executáveiscomandos executáveis

Page 5: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

L = {w c w | w Є (a | b)*}L = {w c w | w Є (a | b)*}

onde ∑ = {a, b, c}onde ∑ = {a, b, c} Sentença típica: Sentença típica: aababcaababaababcaabab

A Teoria de Linguagens Formais demonstra A Teoria de Linguagens Formais demonstra que tais linguagens não podem ser geradas por que tais linguagens não podem ser geradas por gramáticas livres de contextogramáticas livres de contexto ( (GLCGLC’s) ’s)

Ou seja, apresentam Ou seja, apresentam sensibilidade ao sensibilidade ao contextocontexto

No entanto não se usam No entanto não se usam gramáticas sensíveis gramáticas sensíveis ao contextoao contexto ( (GSCGSC’s) para analisar programas ’s) para analisar programas escritos em linguagens de programaçãoescritos em linguagens de programação

Page 6: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

GramáticasGramáticas regulares regulares são usadas na análise são usadas na análise léxicaléxica

Gramáticas Gramáticas livres de contextolivres de contexto são usadas na são usadas na análise análise sintáticasintática

A A sensibilidade ao contextosensibilidade ao contexto das linguagens é das linguagens é verificada na análise verificada na análise semânticasemântica

Exemplo:Exemplo: declaração de identificadores declaração de identificadores

Um identificador é colocado na Um identificador é colocado na tabela de tabela de símbolossímbolos quando de sua quando de sua declaraçãodeclaração

Sua Sua presençapresença nessa tabela é verificada, nessa tabela é verificada, quando de seu quando de seu uso (teste semântico)uso (teste semântico)

Page 7: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

2.2 – Gramáticas Livres de 2.2 – Gramáticas Livres de ContextoContexto

2.2.1 – 2.2.1 – Definição Definição

Tipicamente são usadas Tipicamente são usadas três especificaçõestrês especificações para para se definir uma se definir uma linguagem de programaçãolinguagem de programação::

Especificações Especificações sintáticassintáticas, feitas através de , feitas através de uma uma GLCGLC

Especificações Especificações léxicasléxicas, usando expressões , usando expressões regularesregulares

Especificações Especificações semânticassemânticas, usando , usando restriçõesrestrições às às construções sintáticasconstruções sintáticas

Page 8: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

Em Em compilaçãocompilação, para a maioria das , para a maioria das linguagens linguagens de programaçãode programação,, há uma simplificação tal que:há uma simplificação tal que:

GLC’sGLC’s são usadas para guiar toda a fase de são usadas para guiar toda a fase de análiseanálise e a geração do e a geração do código intermediáriocódigo intermediário (todo o (todo o front-endfront-end do compilador) do compilador)

O O analisador sintáticoanalisador sintático é fundamentado numa é fundamentado numa GLC’s GLC’s

Ele tem como escravo o Ele tem como escravo o analisador léxicoanalisador léxico

Ele tem como recheio o Ele tem como recheio o analisador semânticoanalisador semântico e o e o gerador do código intermediáriogerador do código intermediário

Page 9: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

GLCGLC é uma entidade é uma entidade GG contendo quatro contendo quatro componentescomponentes::

Um conjunto finito Um conjunto finito N N de símbolos de símbolos não-não-terminaisterminais

Um Um alfabetoalfabeto, ou seja, um conjunto finito , ou seja, um conjunto finito ∑∑ de de símbolos símbolos terminaisterminais, também chamados de , também chamados de átomosátomos

A designação de um dos não-terminais de A designação de um dos não-terminais de NN para ser o para ser o símbolo inicialsímbolo inicial, referenciado muitas , referenciado muitas vezes por vezes por SS

Um conjunto Um conjunto PP de produções de produções

Simbolicamente, Simbolicamente, G = {N, ∑, S, P}G = {N, ∑, S, P}

Page 10: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

Forma geral de uma produção: Forma geral de uma produção: A → A → αα

A A é um não-terminal, ou seja, é um não-terminal, ou seja, A Є NA Є N, e é , e é chamado de chamado de lado-esquerdolado-esquerdo

αα é um conjunto de zero ou mais terminais é um conjunto de zero ou mais terminais e/ou não-terminais, ou seja, e/ou não-terminais, ou seja, αα Є (N Є (N ∑)* ∑)*, e , e é chamado de é chamado de lado-direitolado-direito

Page 11: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

De passagem, produção com De passagem, produção com sensibilidade ao sensibilidade ao contextocontexto: :

ββ A A γγ → → ββ αα γγ

A A é um não-terminal, ou seja, é um não-terminal, ou seja, A Є NA Є N

αα,, ββ,, γγ são conjuntos de zero ou mais são conjuntos de zero ou mais terminais e/ou não-terminais, ou seja, terminais e/ou não-terminais, ou seja, αα,, ββ,, γγ Є (N Є (N ∑)* ∑)*

Pelo menos um entre Pelo menos um entre ββ e e γ γ não é vazio não é vazio

A A pode ser substituído por pode ser substituído por αα, se estiver entre , se estiver entre ββ e e γ γ

Page 12: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

2.2.2 – Construção de um programa ou 2.2.2 – Construção de um programa ou sentençasentença

■ Seja a seguinte gramática Seja a seguinte gramática G = {N, ∑, S, P}G = {N, ∑, S, P}

N = {S, A} N = {S, A} ∑ = {(, )}∑ = {(, )}

P = {P = {S S ( A ) | S ( A ) ( A ) | S ( A ) , , A A εε | S | S}}

Símbolo inicial: SSímbolo inicial: S

■ O símbolo inicial O símbolo inicial SS é o embrião é o embrião

■ A construção se inicia substituindo-se o A construção se inicia substituindo-se o símbolo símbolo inicialinicial, pelo , pelo lado direitolado direito de uma de suas de uma de suas produções:produções:

S S S ( A ) S ( A )

■ Tem início a formação do Tem início a formação do fetofeto do programa do programa

Page 13: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

■ A seguir, A seguir, lados esquerdoslados esquerdos de produções que de produções que fazem parte desse feto vão sendo substituídos fazem parte desse feto vão sendo substituídos pelos pelos lados direitoslados direitos

S S S ( A ) S ( A )

( A ) ( A ) ( A ) ( A )

( ) ( A ) ( ) ( A )

( ) ( S )( ) ( S )

( ) ( ( A ) ) ( ) ( ( A ) )

( ) ( ( ) ) ( ) ( ( ) )

P = {P = {S S ( A ) | S ( A ) ( A ) | S ( A ) , , A A εε | S | S}}

A construção termina quando todos os não-terminais tiverem sido substituídos

O símbolo inicial e cada estado do feto são formas sentenciais do programa ou da sentença

Sentença é uma forma sentencial sem não-terminais

Page 14: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

S S S ( A ) S ( A )

( A ) ( A ) ( A ) ( A )

( ) ( A ) ( ) ( A )

( ) ( S )( ) ( S )

( ) ( ( A ) ) ( ) ( ( A ) )

( ) ( ( ) ) ( ) ( ( ) )

P = {P = {S S ( A ) | S ( A ) ( A ) | S ( A ) , , A A εε | S | S}}

A linguagem gerada por G, é o conjunto de todas as sentenças geradas por G

SimbolicamenteL(G) = { w * S * w }

Page 15: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

S S S ( A ) S ( A )

( A ) ( A ) ( A ) ( A )

( ) ( A ) ( ) ( A )

( ) ( S )( ) ( S )

( ) ( ( A ) ) ( ) ( ( A ) )

( ) ( ( ) ) ( ) ( ( ) )

P = {P = {S S ( A ) | S ( A ) ( A ) | S ( A ) , , A A εε | S | S}}

Definição recursiva de forma sentencial de uma gramática:

1) O símbolo inicial S é uma forma sentencial

2) Seja A um não-terminal e sejam α, β, γ cadeias de símbolos terminais e/ou não terminais

3) Se βAγ for uma forma sentencial e A → α uma produção, então β α γ é também uma forma sentencial

Page 16: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

S S S ( A ) S ( A )

( A ) ( A ) ( A ) ( A )

( ) ( A ) ( ) ( A )

( ) ( S )( ) ( S )

( ) ( ( A ) ) ( ) ( ( A ) )

( ) ( ( ) ) ( ) ( ( ) )

P = {P = {S S ( A ) | S ( A ) ( A ) | S ( A ) , , A A εε | S | S}}

Derivação direta é a substituição, numa forma sentencial, de um não-terminal pelo lado direito de uma de suas produções

O processo ao lado apresenta 6 derivações diretas

Page 17: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

S S S ( A ) S ( A )

( A ) ( A ) ( A ) ( A )

( ) ( A ) ( ) ( A )

( ) ( S )( ) ( S )

( ) ( ( A ) ) ( ) ( ( A ) )

( ) ( ( ) ) ( ) ( ( ) )

P = {P = {S S ( A ) | S ( A ) ( A ) | S ( A ) , , A A εε | S | S}}

Derivação de uma forma sentencial é uma sequência de zero ou mais derivações diretas para produzir essa forma, começando do símbolo inicial

Simbolicamente: S * S, S * ( ) ( ( ) ) e S *

( ) ( A )

Outro símbolo: + : sequência de uma ou mais derivações diretas

Page 18: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

S S S ( A ) S ( A )

( A ) ( A ) ( A ) ( A )

( ) ( A ) ( ) ( A )

( ) ( S )( ) ( S )

( ) ( ( A ) ) ( ) ( ( A ) )

( ) ( ( ) ) ( ) ( ( ) )

P = {P = {S S ( A ) | S ( A ) ( A ) | S ( A ) , , A A εε | S | S}}

As definições de derivação e derivação direta e os símbolos , * e + podem ser aplicados a

- Não-terminais diferentes do símbolo inicial - Sub-cadeias de sentenças - Sub-cadeias de formas sentenciais

Exemplos:

A S ( A ) ( ) A + ( A )A * ( )

Page 19: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

Exemplo:Exemplo: produção de um programa na produção de um programa na linguagem linguagem LAtribLAtrib, com as seguintes , com as seguintes características:características:

■ Programas Programas têm só otêm só o módulo principal módulo principal

■ Esse módulo temEsse módulo tem cabeçalho, declarações e cabeçalho, declarações e comandos de atribuiçãocomandos de atribuição

■ As As variáveisvariáveis podem ser podem ser inteirasinteiras e e reaisreais, , escalaresescalares

■ OperadoresOperadores de expressões: de expressões: somasoma e e subtraçãosubtração

■ Expressões podem ter Expressões podem ter parêntesisparêntesis

Page 20: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

Gramática Gramática para para LAtrib:LAtrib:

∑ ∑ = {= {programprogram, , varvar, , intint, , realreal, ID, CTINT, , ID, CTINT, CTREAL, CTREAL, ‘{’‘{’, , ‘}’‘}’, , ‘;’‘;’, , ‘,’‘,’ , , ‘=’‘=’ , , ‘+’‘+’ , , ‘-’‘-’ , , ‘(’‘(’, , ‘)’‘)’}}

Os átomos literais em Os átomos literais em negritonegrito são palavras são palavras reservadasreservadas

N = {N = {ProgramaPrograma, , CabeçalhoCabeçalho, , DeclaraçõesDeclarações, , ListDeclListDecl, , DeclaraçãoDeclaração, , TipoTipo, , ListIdListId, , ComandosComandos, , ListCmdListCmd, , CmdAtribCmdAtrib, , ExpressãoExpressão, , TermoTermo}}

O símbolo inicial é O símbolo inicial é ProgramaPrograma

Page 21: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

Produções Produções da Gramáticada Gramática para para LAtrib:LAtrib:

ProgramaPrograma → → Cabeçalho Declarações ComandosCabeçalho Declarações Comandos

CabeçalhoCabeçalho → → programprogram ID ID ;;

DeclaraçõesDeclarações → → εε | | varvar ListDeclListDeclListDeclListDecl → → DeclaraçãoDeclaração | | ListDecl DeclaraçãoListDecl DeclaraçãoDeclaraçãoDeclaração → → Tipo ListIdTipo ListId ;;TipoTipo → → intint | | realrealListIdListId → ID | → ID | ListIdListId ,, ID ID

ComandosComandos → → {{ ListCmdListCmd }}ListCmdListCmd → → εε | | ListCmd CmdAtribListCmd CmdAtribCmdAtribCmdAtrib → ID → ID == ExpressãoExpressão ;;ExpressãoExpressão → → TermoTermo | | ExpressãoExpressão ++ TermoTermo | |

ExpressãoExpressão -- TermoTermoTermoTermo → ID | CTINT | CTREAL | → ID | CTINT | CTREAL | (( ExpressãoExpressão ))

Seja o programa Exemplo:

program Exemplo; var int i, j; real x;{

i = 2; j = 3; x = 5.5–(i+j);

}

Seja a construção do programa Exemplo

Page 22: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

ProgramaPrograma Cabeçalho Declarações ComandosCabeçalho Declarações Comandos

++ programprogram ID ID(Exemplo)(Exemplo) ; ; varvar ListDeclListDecl {{ ListCmdListCmd }}

++ programprogram ID ID(Exemplo)(Exemplo) ; ; var var ListDecl Declaração ListDecl Declaração {{ ListCmd CmdAtrib ListCmd CmdAtrib }}

++ programprogram ID ID(Exemplo)(Exemplo) ; ; var var Declaração Declaração DeclaraçãoDeclaração

{{ ListCmd CmdAtrib CmdAtribListCmd CmdAtrib CmdAtrib }}

++ programprogram ID ID(Exemplo)(Exemplo) ; ; var var Declaração Declaração DeclaraçãoDeclaração

{{ ListCmd CmdAtrib CmdAtrib CmdAtribListCmd CmdAtrib CmdAtrib CmdAtrib }}

program Exemplo; var int i, j; real x;{i = 2; j = 3; x = 5.5 – (i + j);}

Page 23: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

++ programprogram ID ID(Exemplo)(Exemplo) ; ; var var Declaração Declaração DeclaraçãoDeclaração

{{ CmdAtrib CmdAtrib CmdAtribCmdAtrib CmdAtrib CmdAtrib }}

++ programprogram ID ID(Exemplo)(Exemplo) ; ; var var Tipo ListIdTipo ListId ;; Tipo Tipo ListIdListId ;;

{{ ID ID(i)(i) == ExpressãoExpressão ;; ID ID(j)(j) == ExpressãoExpressão ;;

IDID(x)(x) == ExpressãoExpressão ;; }}

++ programprogram ID ID(Exemplo)(Exemplo) ; ;

var intvar int ListIdListId ,, ID ID(j)(j) ;; realreal ID ID(x)(x) ;;

{{ ID ID(i)(i) == TermoTermo ;; ID ID(j)(j) == TermoTermo ;;

IDID(x)(x) == ExpressãoExpressão -- TermoTermo ;; }}

program Exemplo; var int i, j; real x;{i = 2; j = 3; x = 5.5 – (i + j);}

Page 24: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

++ programprogram ID ID(Exemplo)(Exemplo) ; ;

var int var int IDID(i)(i) , , IDID(j)(j) ; real ; real IDID(x)(x) ; ;

{ { IDID(i)(i) = = TermoTermo ; ; IDID(j)(j) = = TermoTermo ; ;

IDID(x)(x) = = TermoTermo - ( - ( ExpressãoExpressão ) ; } ) ; }

++ programprogram ID ID(Exemplo)(Exemplo) ; ;

var int var int IDID(i)(i) , , IDID(j)(j) ; real ; real IDID(x)(x) ; ;

{ { IDID(i)(i) = = TermoTermo ; ; IDID(j)(j) = = TermoTermo ; ;

IDID(x)(x) = = TermoTermo - ( - ( ExpressãoExpressão + + TermoTermo ) ; } ) ; }

program Exemplo; var int i, j; real x;{i = 2; j = 3; x = 5.5 – (i + j);}

Page 25: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

++ programprogram ID ID(Exemplo)(Exemplo) ; ;

var var

int int IDID(i)(i) , , IDID(j)(j) ; real ; real IDID(x)(x) ; ;

{ {

IDID(i)(i) = = TermoTermo ; ; IDID(j)(j) = = TermoTermo ; ;

IDID(x)(x) = = TermoTermo - ( - ( TermoTermo + + TermoTermo ) ; ) ;

}}

program Exemplo; var int i, j; real x;{i = 2; j = 3; x = 5.5 – (i + j);}

Page 26: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

++ programprogram ID ID(Exemplo)(Exemplo) ; ;

var var

int int IDID(i)(i) , , IDID(j)(j) ; real ; real IDID(x)(x) ; ;

{ {

IDID(i)(i) = = CTINTCTINT(2)(2) ; ; IDID(j)(j) = = CTINTCTINT(3)(3) ; ;

IDID(x)(x) = = CTREALCTREAL(5.5)(5.5) - ( - (IDID(i)(i) + + IDID(j)(j) ) ) ; ;

}}

program Exemplo; var int i, j; real x;{i = 2; j = 3; x = 5.5 – (i + j);}

Page 27: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

2.2.3 – Árvores sintáticas2.2.3 – Árvores sintáticas

■ Árvore sintática Árvore sintática é uma representação gráfica é uma representação gráfica de uma de uma derivaçãoderivação

■ Exemplo:Exemplo: árvore sintática de árvore sintática de S S ** ( ) ( ( ) ) ( ) ( ( ) )

Page 28: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

Árvore sintática do programa

Exemplo

program Exemplo; var int i, j; real x;{

i = 2; j = 3; x = 5.5–(i+j);

}

Page 29: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

2.3 – GLC’s Ambíguas2.3 – GLC’s Ambíguas Uma GLC é Uma GLC é ambíguaambígua, se uma de suas , se uma de suas

sentenças possuir sentenças possuir 2 ou mais árvores 2 ou mais árvores sintáticas distintassintáticas distintas

Exemplo: Exemplo: Seja a gramáticaSeja a gramática G = { G = {, N, P, S} , N, P, S} tal que:tal que:

= {a, b}; N = {S}; P = {S = {a, b}; N = {S}; P = {S S b S S b S a} a}

GG é ambígua pois a sentença é ambígua pois a sentença ababaababa tem duas tem duas árvores sintáticas:árvores sintáticas:

Page 30: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

Exemplo: Exemplo: a a Língua Portuguesa sem Língua Portuguesa sem pontuaçãopontuação teria sérias ambiguidades teria sérias ambiguidades

A fraseA frase

matar o rei não é pecadomatar o rei não é pecado

teria dois sentidos: teria dois sentidos:

1) matar o rei não é pecado1) matar o rei não é pecado

2) matar o rei não é pecado2) matar o rei não é pecado

Page 31: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

Em Em compilaçãocompilação, as gramáticas devem ser , as gramáticas devem ser não-ambíguasnão-ambíguas, ou então, deve-se acrescentar , ou então, deve-se acrescentar regrasregras para resolver ambiguidades para resolver ambiguidades

Exemplo: Exemplo: comando comando if-elseif-else da Linguagem C da Linguagem C

Produções:Produções:

S S if B S else S if B S else S if B S if B S a1 a1 a2 a2

B B b1 b1 b2 b2

Page 32: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

A sentençaA sentença

if b1 if b2 a1 else a2if b1 if b2 a1 else a2

tem duas árvores sintáticas, a saber:tem duas árvores sintáticas, a saber:

S S if B S else S if B S else S if B S if B S a1 a1 a2 a2B B b1 b1 b2 b2

Regra de solução: fazer o else corresponder ao último if

Page 33: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

2.4 – GLC’s Recursivas à 2.4 – GLC’s Recursivas à EsquerdaEsquerda

Uma GLC é Uma GLC é recursiva à esquerdarecursiva à esquerda, se tiver um , se tiver um não-terminal não-terminal AA tal que haja uma derivação tal que haja uma derivação A A ++ A A, onde , onde (N (N ))**

Exemplo: Exemplo: Na gramáticaNa gramática G = { G = {, N, P, S} , N, P, S} tal tal que:que:

= {a, b}; N = {S}; P = {S = {a, b}; N = {S}; P = {S S b S S b S a} a}

tem-se tem-se S S S b S S b S (recursividade (recursividade imediata à esquerda)imediata à esquerda)

Page 34: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

Exemplo: Exemplo: Na gramáticaNa gramática da linguagem da linguagem LAtribLAtrib, , as seguintes produções são as seguintes produções são recursivas à recursivas à esquerdaesquerda: :

ListDeclListDecl → → ListDecl DeclaraçãoListDecl Declaração

ListIdListId → → ListIdListId ,, ID ID

ListCmdListCmd → → ListCmd CmdAtribListCmd CmdAtrib

ExpressãoExpressão → → ExpressãoExpressão ++ TermoTermo | | ExpressãoExpressão -- TermoTermo

Page 35: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

Existe Existe recursividade não-imediatarecursividade não-imediata à à esquerda esquerda

Exemplo:Exemplo: Seja a gramática Seja a gramática G = {G = {, N, P, S} , N, P, S} na qual:na qual:

= {a, b, c, d}; N = {S, A}; = {a, b, c, d}; N = {S, A};

P = {S P = {S Aa Aa b b ,, A A Sc Sc d } d }

Essa gramática é Essa gramática é não-imediatamente não-imediatamente recursivarecursiva à esquerda pois: à esquerda pois:

S S A a A a S c a S c a

Page 36: CES-41 COMPILADORES Capítulo II Gramáticas e Linguagens.

Análise sintática top-downAnálise sintática top-down - - grande grupo de grande grupo de métodos muito populares de análise sintática:métodos muito populares de análise sintática:

Não consegue tratar gramáticas Não consegue tratar gramáticas recursivas à recursivas à esquerdaesquerda

Tais gramáticas devem então ser Tais gramáticas devem então ser transformadastransformadas em outras equivalentes em outras equivalentes não-não-recursivas à esquerdarecursivas à esquerda

Essa transformação será vista no Essa transformação será vista no Capítulo VCapítulo V

Análise sintática bottom-upAnálise sintática bottom-up - - outro grande outro grande grupo de métodos muito populares de análise grupo de métodos muito populares de análise sintática:sintática:

Trabalha mais eficientemente com gramáticas Trabalha mais eficientemente com gramáticas recursivas à esquerdarecursivas à esquerda

YaccYacc usa análise usa análise bottom-upbottom-up