Gramáticas LR. Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal

Tamanho: px
Começar a partir da página:

Download "Gramáticas LR. Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal"

Transcrição

1 Gramáticas LR Simão Melo de Sousa Computer Science Department University of Beira Interior, Portugal

2 Plano Princípios Gerais 1 Princípios Gerais Considerações sobre as Gramáticas Livres de Contexto Motivação para as analises ascendentes Princípios 2 Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) 3 4 Gestão dos conflitos Gestão dos erros

3 Plano Princípios Gerais Considerações sobre as Gramáticas Livres de Contexto Motivação para as analises ascendentes Princípios 1 Princípios Gerais Considerações sobre as Gramáticas Livres de Contexto Motivação para as analises ascendentes Princípios 2 3 4

4 Comparar as classes gramaticais Considerações sobre as Gramáticas Livres de Contexto Motivação para as analises ascendentes Princípios Uma mesma linguagem pode ser reconhecida por várias gramáticas. Identificamos nesta lição várias classes de gramáticas para as quais é possível construir analisadores eficazes.

5 Motivação para as analises ascendentes Considerações sobre as Gramáticas Livres de Contexto Motivação para as analises ascendentes Princípios Para uma classe importante de gramáticas é possível construir um analisador sintáctico ascendente. Este é eficaz. Trata estritamente todas as gramáticas LL(1). Tem um comportamento satisfatório relativamente aos processamento dos erros. Ao contrário das gramáticas LL(k) que precisam de decidir que produção escolher ao ler k tokens da entrada, é possível adiar a escolha da regra de produção escolher até ter consumido todos os elementos necessários para formar a parte direita da produção.

6 Considerações sobre as Gramáticas Livres de Contexto Motivação para as analises ascendentes Princípios Funcionamento Geral Vamos aqui considerar gramáticas: Com uma só produção com o símbolo inicial S no lhs. Em que as derivações α = β consideradas são direitas.

7 Considerações sobre as Gramáticas Livres de Contexto Motivação para as analises ascendentes Princípios Funcionamento Geral Considerar um autómato de pilha: Ler a entrada da esquerda para a direita. Reconhecer os rhs (membros direitos) das produções com o objectivo de construir a árvore de derivação sintáctica das folhas até a raíz (o símbolo inicial). Pilha : palavra de (N T ) 2 tipos de transições = 2 acções: shift: leitura de um terminal (colocar na pilha - push) reduce: reconhecimento de um rhs da gramática considerada Estado inicial: pilha vazia

8 Funcionamento Geral (cont.) Considerações sobre as Gramáticas Livres de Contexto Motivação para as analises ascendentes Princípios O autómato pode ser executado enquanto for possível escolha entre acções (shift ou reduce). O autómato pára caso contrário. A análise é bem sucedida quando o autómato pára após leitura completa da entrada e que o estado da pilha é o símbolo inicial S. Caso contrário, a análise falhou. No caso de uma análise que conduz ao sucesso: Seja α i o estado da pilha Seja m i o estado da entrada no instante i da análise. Neste caso α i m i é o inverso da duma derivação direita que parte de S. Com m, palavra por reconhecer, m = m 0.

9 Ponto de Apoio Considerações sobre as Gramáticas Livres de Contexto Motivação para as analises ascendentes Princípios Seja α uma palavra de (N T ) Um ponto de apoio de α é um par produção X ::= β, uma descomposição de α em α 1βm (m T ) tais que S = α 1Xm = α (onde, recordemos, α = α 1βm) Ou seja, um ponto de apoio permite fundamentar/apoiar um passo de uma derivação direita resultando em α.

10 Considerações sobre as Gramáticas Livres de Contexto Motivação para as analises ascendentes Princípios Exemplo Gramática 1 S ::= aabe 2 A ::= Abc 3 A ::= b 4 B ::= d pilha entrada acção 1 ɛ abbcde shift 2 a bbcde shift 3 α = a b bcde reduce 4 a A bcde shift 5 a A b cde (shift) (reduce) No primeiro reduce: α = ab, Ponto de apoio = (A ::= b, α 1 = a, β = b, m = ɛ). No passo 5, a escolha entre um shift (ler um c) e beneficiar a regra 3 ou reduzir a regra 2 (ou seja, pop(rhs(regra 2)) e push(lhs(regra 2))). escolha : shift pilha entrada acção 6 aabc de reduce 7 aa de shift 8 aad e reduce 9 aab e shift 10 aabe ɛ reduce 11 S ɛ SUCESSO escolha : reduce pilha entrada acção 6 aaa cde shift 7 aaac de shift 8 aaacd e reduce 9 aaacb e shift 10 aaacbe ɛ FALHA

11 Algumas Considerações Considerações sobre as Gramáticas Livres de Contexto Motivação para as analises ascendentes Princípios Escolher pontos de apoio não é sempre trivial. Reconhecer no topo da pilha um ponto de apoio não é simples... Por exemplo: Dois pontos de apoio podem ser candidatos numa mesma situação: Esta situação é sintomática de conflitos/ambiguidade na gramática.

12 Conflitos Princípios Gerais Considerações sobre as Gramáticas Livres de Contexto Motivação para as analises ascendentes Princípios Vimos nos acetatos anteriores dois reconhecimentos sintácticos ascendentes da mesma palavra (um sucesso e uma falha). Queremos ser assim capazes de encontrar analises bem sucedidas que permitam apurar com toda a certeza o pertence á linguagem (language membership) da palavra analisada. Mas como reagir se existir duas analises ascendentes que resultam em árvores de derivação distintos?

13 Um exemplo Considerações sobre as Gramáticas Livres de Contexto Motivação para as analises ascendentes Princípios Reconhecimento de id + id id por uma analise ascendente e pela gramática Gramática 1 S ::= E 2 E ::= E + E 3 E ::= E E 4 E ::= ( E ) 5 E ::= id pilha entrada acção 6 E + E id shift 7 E + E id shift 8 E + E id ɛ reduce 5 9 E + E E ɛ reduce 3 10 E + E ɛ reduce 2 11 E ɛ reduce 1 12 S ɛ SUCESSO E + (E E) pilha entrada acção 1 ɛ id + id id shift 2 id +id id reduce 5 3 E +id id shift 4 E+ id id shift 5 E + id id reduce 5 pilha entrada acção 6 E + E id reduce 2 7 E id shift 8 E id shift 9 E id ɛ reduce 5 10 E E ɛ reduce 3 11 E ɛ reduce 1 12 S ɛ SUCESSO (E + E) E

14 Coniderações Finais Considerações sobre as Gramáticas Livres de Contexto Motivação para as analises ascendentes Princípios Soluções ao problema anterior? Reescrever a gramática. Associar prioridades e associatividades aos operadores (permitam decidir localmente as ambiguidades). Um exemplo simples: imaginemos que tenhamos um conflito entre a redução por uma regra X ::= β e uma leitura de a. se prioridade(a) > prioridade(x ::= β) então leitura senão se prioridade(a) < prioridade(x ::= β) então redução X ::= β senão olhar para as regras de associatividade. Um argumento a favor das analises ascendentes: Permitam expressar gramáticas com um aspecto mais natural. Vamos agora ver no resto da lição como operacionalizar estas analises ascendentes coma ajuda das analises de tipo LR.

15 Plano Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) 1 Princípios Gerais 2 Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) 3 4

16 Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Analise ascendente ponderada por um autómato finito Vimos que a analise ascendente funciona com base em tomadas de decisões entre leituras ou reduções. Podemos imaginar que estas decisões possam ser tomadas graças a ajuda dum autómato finito sobre um conjunto Q de estados e sobre o alfabeto (N T ). Cada transição sobre um terminal pode ter como etiqueta uma indicação de leitura ou de redução duma determinada produção, ou ainda uma indicação de sucesso ou de insucesso.

17 Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Funcionamento da análise com base no autómato A pilha é uma palavra s 0x 1s 1x 2s 2... x ns n com s i estado e x i (N T ). Seja s o estado no topo da pilha e a o primeiro caracter da entrada por reconhecer. Olha-se para a etiqueta da transição para o estado s e a entrada a. Se esta indica o sucesso ou um insucesso, paramos. Se indica uma leitura então acrescentamos à pilha a entrada a assim como o estado que resulta da transição. Se indica uma redução duma regra como A ::= α e se α tem por comprimento p então a pilha é da forma s 0 x 1 s 1... x n s n... x n+p s n+p. Substitui-se esta pilha por s 0 x 1 s 1... x n s n... x n s n As com s estado resultado da transição a partir do estado s n para o não-terminal A. Podemos assim notar que cada estado do autómato corresponde ao reconhecimento dum prefixo de uma das palavras que forma a derivação direita.

18 Tabela de acções e de deslocação Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Em prática, não se trabalha directamente com o autómato, prefere-se trabalhar com a tabela de transição que aqui se descompõe numa tabela de acção (action) e numa tabela de deslocação (goto). As linhas da tabela de deslocação são os estados e as colunas são os não-terminais. Cada célula contém a informação dum estado (eventualmente o estado de insucesso). Nota-se por goto(s, X ) o estado resultante da transição do estado s com o não-terminal X. A tabela de acção tem por linhas os estados e por colunas os terminais. Cada célula action(s, a) por um estado s e um terminal a é constituída da indicação de, alternativamente: shift s, que indica que é necessário ler um caracter e colocar s na pilha. reduce A ::= α que indica que é necessário reduzir a pilha com a produção A ::= α sucesso insucesso

19 Gramáticas LR(1) Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Uma gramática é LR(1) se respeita a seguinte propriedade: seja uma derivação direita S αxm αβm seja uma outra derivação direita conduzindo ao mesmo estado da pilha αβ, S γyp αβm se m e m começam pelo mesmo caracter então α = γ, X = Y e p = m Para tais gramáticas é possível construir um conjunto de estado e tabelas de acção e deslocação permitindo uma análise ascendente da linguagem.

20 Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Construção do autómato com base em itens simples Construção simples e eficaz mas insuficiente para tratar todas as gramáticas LR(1). Hipótese inicial: o símbolo inicial da gramática G = (N, T, S, P) só aparece uma vez no lhs duma produção (lhs=left hand side) S ::= α, sendo o indicador de fim de entrada (logo, de ocorrência única). (É fácil transformar qualquer gramática por forma a respeitar esta hipótese) O princípios é o seguinte: considera-se como estados os itens de G que são os triplos [Y α.β] tais que Y αβ seja uma produção da gramática. As etiquetas das transições do autómato finito pertencem ao conjunto (N T ). As transições são: a [Y α.aβ] [Y αa.β] [Y α.x β] X [Y αx.β] ɛ [Y α.x β] [X.γ] se X ::= γ P O estado inicial é [S.α ]

21 Exemplo Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Gramática 1 S ::= S 2 S ::= a A B c 3 A ::= b B a 4 B ::= b B 5 B ::= c Conjunto dos itens 1 S ::=.S 4 S ::=.aabc 9 A ::=.bba 13 B ::=.bb 16 B ::=.c 2 S ::= S. 5 S ::= a.abc 10 A ::= b.ba 14 B ::= b.b 17 B ::= c. 3 S ::= S. 6 S ::= aa.bc 11 A ::= bb.a 15 B ::= bb. 7 S ::= aab.c 12 A ::= bba. 8 S ::= aabc.

22 Exemplo Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Figura: Autómato dos itens simples não determinístico

23 Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Construção do autómato com base em itens simples (Cont.) Em cada estado do autómato reconheceu-se uma palavra que é um prefixo duma palavra aparecendo numa derivação direita. Vamos determinisar este autómato. Para tal agrupa-se todos os estados ligados por transições ɛ com base no fecho do conjunto de itens. Nota: é costume minorar a importância do item S α.. Pelo que a sua presença é opcional. Nas analises LR seguintes permitiremo-nos ignorar a sua existência (este item é atingido pela única transição com a etiqueta )

24 Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Construção do autómato com base em itens simples (Cont.) O fecho de um conjunto I de itens é definido como o menor conjunto tal que I fecho(i ) Se [Y α.x β] fecho(i ) e X ::= γ P então [X.γ] fecho(i ) Assim as transições do autómato determinista são: a I fecho({[y αa.β] [Y α.aβ] I }) X I fecho({[y αx.β] [Y α.x β] I }) Em que o estado inicial é o fecho de {[S.α ]}

25 Exemplo Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Gramática 1 S ::= S 2 S ::= a A B c 3 A ::= b B a 4 B ::= b B 5 B ::= c Conjunto de itens por considerar (estados) S S ::= aa.bc ::=.S S ::= S. S S ::= a.abc ::= S. B ::=.bb S ::= aab.c S ::= aabc. S ::=.aabc A ::=.bba B ::=.c Conjunto de itens por considerar (estados) (cont.) B ::= b.b B ::=.bb B ::=.c B ::= bb. A ::= b.ba B ::=.bb B ::=.c A ::= bb.a A ::= bba. B ::= c.

26 Exemplo Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Gramática 1 S ::= S 2 S ::= a A B c 3 A ::= b B a 4 B ::= b B 5 B ::= c Figura: Autómato dos itens simples determinístico

27 Analisador LR(0) Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Ao construir o autómato precedente obtemos os estados I 0, I 1, I 2... I n. As transições determinam a tabela das deslocações goto: X goto(i, X ) = J se e só se I J a Se estamos num estado I e que X α.aβ e I J então podemos ler uma entrada a e o autómato vai para o estado J. Para reduzir precisamos de ter reconhecido a parte direita duma produção. Ou seja: estar num estado I que contém um item [X γ.] Constrói-se a tabela de acção da forma seguinte: accão(i, ) = sucesso se existe uma transição I J (note que esta transição se faz necessariamente para um estado reduzido a [S α.]) a accão(i, a) = shift(j) se a e I J accão(i, a) = reduce(x ::= γ) se X γ. I Nota-se que não há condições sobre a para a introdução duma acção de redução. Quando um estado contém um item terminal, a redução faz-se qualquer que seja o caracter de entrada.

28 Gramática LR(0) Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Uma gramática é designada de LR(0) quando não existem conflitos entre duas acções (entre duas acções de redução ou entre uma de leitura e uma de redução).

29 Exemplo Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) A gramática seguinte : 0 S ::= A 1 A ::= (L) 2 A ::= x 3 L ::= A 4 L ::= L, A é LR(0) e gera o autómato com 9 estados seguintes:

30 Exemplo Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) s 1 = s 5 = s 9 = [S.A ] [A.(L)] [A.x] [A (L.)] [L L., A] [L L, A.] s 2 = [A x.] s 3 = [A (.L)] [L.A] [L.L, A] [A.(L)] [A.x] s 4 = s 6 = [A (L).] s 7 = [L A.] s 8 = [S A. ] [L L,.A] [A.(L)] [A.x]

31 Exemplo Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) 0 S ::= A 1 A ::= (L) 2 A ::= x 3 L ::= A 4 L ::= L, A

32 Exemplo Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) As tabelas de acção e deslocação são as seguintes (vazio=insucesso): ( ) x, A L 1 shift 3 shift 2 goto 4 2 reduce 2 reduce 2 reduce 2 reduce 2 reduce 2 3 shift 3 shift 2 goto 7 goto 5 4 sucesso 5 shift 6 shift 8 6 reduce 1 reduce 1 reduce 1 reduce 1 reduce 1 7 reduce 3 reduce 3 reduce 3 reduce 3 reduce 3 8 shift 3 shift 2 goto 9 9 reduce 4 reduce 4 reduce 4 reduce 4 reduce 4

33 Exercício Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Mostre que a primeira gramática é LR(0) mas não a segunda 1 S ::= A S ::= B A ::= aab A ::= 0 B ::= abbb B ::= 1 2 (0) S ::= E (1) E ::= T + E (2) E ::= T (3) T ::= x

34 Princípios Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Vamos procurar limitar o número de reduções. O problema é decidir para qual entradaa efectuar a redução. A derivação terá a forma S αxm αγm A entrada começa pelo primeiro terminal de m que é forçosamente no conjunto SEG(X ). Junta-se assim: accão(i, a) = reduce(x ::= γ) se e só se [X γ.] I e a SEG(X ) A gramática é SLR(1) se a tabela de transição obtida não exibe conflitos.

35 Exemplo Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Da gramática anterior resultam os estados e as tabelas seguintes: [S.E ] [E.T + E] s 1 = [E.T ] [T.x] s 2 = [S E. ] [E T. + E] s 3 = [E T.] [E T +.E] [E.T + E] s 4 = [E.T ] [T.x] s 5 = [T x.] s 6 = [E T + E.]

36 Exemplo Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) x + E T 1 shift 5 goto 2 goto 3 2 sucesso 3 shift 4 reduce 2 4 shift 5 goto 6 goto 3 5 reduce 3 reduce 3 6 reduce 1

37 Mais um exemplo Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) O facto de contemplar uma redução quando a entrada é um seguinte do não-terminal em questão pode gerar conflitos mesmo se a gramática é LR(1). Por exemplo: S ::= E E ::= L = R E ::= R L ::= R L ::= id R ::= L No estado inicial temos os itens seguintes: [S.E], [E.L = R], [E.R], [R.L], [L.id], [L. R] Pela leitura L chega-se ao estado formado pelos itens seguinte: [E L. = R], [R L.] Como = SEG(R) temos um conflito leitura/redução (shift/reduce)

38 Princípios Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Para alagar o leque de gramáticas analisáveis vamos introduzir mais informação nos itens por forma a controlar melhor os caracteres que podem surgir a seguir. Chamemos assim de 1-itens os itens da forma [X α.β, a] que corresponde a situação: procurar derivar αβ a partir de X, o caracter seguinte sendo a. Consideremos o seguinte algoritmo para calcular o fecho (uma adaptação do algoritmo já apresentado). Seja I um conjunto de 1 itens Fecho(I ) = Ponto Fixo de (I {(X.γ, w) ([A α.x β, z] I ) (X γ, produção) (w Prim(βz)) }

39 Princípios Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Consideremos igualmente que temos sempre a produção inicial S S O estado inicial é o fecho dos 1 itens [S.α, ] (para cada produção S α), ou, equivalentemente [S.S, ɛ]. Notação I [Y α.β,b] significa o conjunto de itens I que contém o item [Y α.β, b]. Assim, as transições são: a I [Y α.aβ,b] fecho([y αa.β, b]) X I [Y α.x β,b] fecho([y αx.β, b])

40 Princípios Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) as tabelas de transição são construídas de forma análoga, no entanto introduz-se uma acção de redução em accão(i, a) desde que I contém um item [X γ., a] notação simplificadora: [X α.β, a 1]... [X α.β, a n] [X α.β, a 1a 2... a n] (junta-se no mesmo item todos os itens que diferem só pelo caracter de antevisão) As transições se reescrevem da seguinte forma: a I [Y α.aβ,b1...bp] fecho([y αa.β, b1... b p ]) X I [Y α.x β,b1...bp] fecho([y αx.β, b1... b p ])

41 Exemplo - Autómato LR(1) Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1)

42 Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Exemplo - Tabelas Acção/Deslocação LR(1)

43 LR(k) Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) As gramáticas LR(1) generalizam-se para LR(k) onde são tomados em conta até k caracteres seguintes ao item considerado.

44 Princípios Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) O método precedente funciona para todas as gramáticas LR(1) mas gera tabelas enormes. Os estados formados de 1 item na analise LR(1) correspondem aos estados da analise LR(0) mas nos quais cada item ficou anotado com uma lista dos símbolos seguintes. Podemos ter um estado 0 item duplicado em vários estados da analise. Em prática o número de estados canónicos de LR(1) é bem maior do que o de analises como LR(0) ou SLR(1). A ideia aqui é assim actuar ao nível dos estados gerados numa analise LR(0) tentando agrupar todos os estados que partilham a mesma estrutura LR(0) subjacente. Aqui consideraremos a união dos caracteres seguintes.

45 Princípios Princípios Gerais Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Consideremos que os estados do autómato LR(1) são I 1... I n. Agrupamos todos os estados que tem a mesma estrutura LR(0), obtemos os estados J 1... J p. Determina-se a tabela de deslocação da mesma forma que no caso LR(0). As acções de redução são definidas como no caso LR(1). Uma gramática que não gera conflitos numa tabela LALR(1) é designada de gramática LALR(1).

46 Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Exemplo - Autómato LALR(1) via LR(1)

47 Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Exemplo - Tabelas LALR(1) via LR(1)

48 LALR(1) vs. LR(1) Utilização de itens simples Analise LR(0) Analise SLR(1) Analise LR(1) Analise LALR(1) Conflitos. Os únicos conflitos que surgem relativamente a analise LR(1) são conflitos entre duas reduções. De facto se existe um conflito leitura/redução então significa que existem dois estados X γ., a e Y α.aβ, c, mas neste caso existe o item Y α.aβ, d já no estado do autómato LR(1) na origem. Contradição. As gramáticas LALR(1) são menos poderosas que as gramáticas LR(1) mas são em contrapartida mais eficientes, devido ao facto de construírem autómatos mais compactos. Ferramentas como o yacc e os seus derivados geram analizadores sintácticos ascendentes que aceitam gramáticas LALR(1).

49 Plano Princípios Gerais 1 Princípios Gerais 2 3 4

50 Legendas Princípios Gerais Para começar, umas notações para facilitar a apresentação das tabelas LR s n: leitura (shift) para o estado n g n: deslocação (goto) para o estado n r k : redução pela regra k a: aceitação/sucesso vazio: erro/insucesso

51 Um Exemplo - Gramática 1 1 S S; S 2 S id:=e 3 S print(l) 4 E id 5 E num 6 E E + E 7 E (S, E) 8 L E 9 L L, E

52 Tabela LR para a gramática 1 id num print ;, + := ( ) $ S E L 1 s 4 s 7 g 2 2 s 3 a 3 s 4 s 7 g 5 4 s 6 5 r 1 r 1 r 1 6 s 20 s 10 s 8 g 11 7 s 9 8 s 4 s 7 g 12 9 s 20 s 10 s 8 g 15 g r 5 r 5 r 5 r 5 r 5 11 r 2 r 2 s 16 r 2 12 s 3 s r 3 r 3 r 3 14 s 19 s r 8 r 8 16 s 20 s 10 s 8 g r 6 r 6 s 16 r 6 r 6 18 s 20 s 10 s 8 g s 20 s 10 s 8 g r 4 r 4 r 4 r 4 r 4 21 s r 7 r 7 r 7 r 7 r 7 23 r 9 s 16 r 9

53 Um Exemplo - Gramática 2 1 E id 2 E num 3 E E * E 4 E E / E 5 E E + E 6 E E - E 7 E ( E )

54 Um Exemplo - Gramática 3 1 E E + T 2 E E T 3 E T 4 T T F 5 E T /F 6 E F 7 F id 8 F num 9 F (E)

55 Um Exemplo - Gramática 4 1 S if E then S else S 2 S begin S L 3 S print E 4 L end 5 L ; S L 6 E num = num

56 Um Exemplo - Gramática 5 1 Z d 2 Z X Y Z 3 Y 4 Y c 5 X Y 6 X a

57 A tabela de Parsing LL(1) para a gramática 5 a b c X X a X Y X Y X Y Y Y Y Y c Y Z Z XYZ Z XYZ Z XYZ Z d

58 Um Exemplo - Gramática 6 3 E + T E 1 S E $ 2 E T E 4 E T E 5 E 6 T F T 7 T F T 8 T / F T 9 T 10 F id 11 F num 12 F ( E )

59 A tabela das funções NULL, PRIMEIRO e SEGUINTES para a Gramática 6 NULL PRIMEIRO SEGUINTE S ( id num E ( id num ) $ E + ) $ T ( id num ) + $ T + ) + $ F ( id num ) / + $

60 A tabela de parsing LL(1) para a gramática 6 + id ( ) $ S S E$ S E$ E E TE E TE E E +TE E E T T FT T FT T T T FT T T F F id F id

61 Um Exemplo - Gramática 7 0 S S $ 1 S ( L ) 2 S x 3 L S 4 L L, S

62 Estados LR(0) para a gramática 7

63 Tabela de parsing LR(0) para a gramática 7 ( ) x, $ S L 1 s 3 s 2 g 4 2 r 2 r 2 r 2 r 2 r 2 3 s 3 s 2 g 7 g 5 4 a 5 s 6 s 8 6 r 1 r 1 r 1 r 1 r 1 7 r 3 r 3 r 3 r 3 r 3 8 s 3 s 2 g 9 9 r 4 r 4 r 4 r 4 r 4

64 Um Exemplo - Gramática 8 0 S E $ 1 E T + E 2 E T 3 T x

65 Estados LR(0) para a gramática 8

66 Tabela de parsing LR(0) para a gramática 8 x + $ E T 1 s 5 g 2 g 3 2 a 3 r 2 s 4,r 2 r 2 4 s 5 g 6 g 3 5 r 3 r 3 r 3 6 r 1 r 1 r 1

67 Tabela de parsing SLR para a gramática 8 x + $ E T 1 s 5 g 2 g 3 2 a 3 s 4 r 2 4 s 5 g 6 g 3 5 r 3 r 3 6 r 1

68 Um Exemplo - Gramática 9 0 S S $ 1 S V = E 2 S E 3 E V 4 V x 5 V E

69 Estados LR(1) para a gramática 9

70 Tabela de parsing LR(1) para a gramática 9 x = $ S E V 1 s 8 s 6 g 2 g 5 g 3 2 a 3 s 4 r 3 4 s 11 s 13 g 9 g 7 5 r 2 6 s 8 s 6 g 10 g 12 7 r 3 8 r 4 r 4 9 r 1 10 r 5 r 5 11 r 4 12 r 3 r 3 13 s 11 s 11 g 14 g 7 14 r 5

71 Tabela de parsing LALR(1) para a gramática 9 x = $ S E V 1 s 8 s 6 g 2 g 5 g 3 2 a 3 s 4 r 3 4 s 8 s 6 g 9 g 7 5 r 2 6 s 8 s 6 g 10 g 7 7 r 3 r 3 8 r 4 r 4 9 r 1 10 r 5 r 5

72 Plano Princípios Gerais Gestão dos conflitos Gestão dos erros 1 Princípios Gerais Gestão dos conflitos Gestão dos erros

73 Gestão dos conflitos Gestão dos erros De tipo: if then else Consideremos as três regras: (1) S if E then S else S, (2) S if E then S e (3) S resto Em if a then if b then x else y = a que if pertence o else? Conflito shift/reduce com else entre (reduce) S if E then S. e (shift) S if E then S. else S uma solução: reescrever a gramática desta forma 1 S M 2 S U 3 M if E then M else M 4 M resto 5 U if E then S 6 U if E then M else U outra solução: deixar como está! De facto em caso de conflito shift/reduce, as ferramentas como yacc assumem a interpretação shift. Este truque deve ser usado com cuidado! Em caso de conflito verificar com cuidado se podem deixar o yacc decidir sempre pelo shift.

74 Gestão dos conflitos Gestão dos erros Em concreto...(ocamlyacc -v exemplo.mly) %{ %} %token ID WHILE BEGIN END DO IF THEN ELSE SEMI ASSIGN EOF %start prog %type <unit>prog %% prog: stmlist EOF {}; stmlist: stm {} stmlist SEMI stm {}; stm: ID ASSIGN ID {} WHILE ID DO stm {} BEGIN stmlist END {} IF ID THEN stm {} IF ID THEN stm ELSE stm {};

75 Gestão dos conflitos Gestão dos erros Em concreto...(ocamlyacc -v exemplo.mly) 0 $accept : %entry% $end 1 prog : stmlist EOF 2 stmlist : stm 3 stmlist SEMI stm 4 stm : ID ASSIGN ID 5 WHILE ID DO stm 6 BEGIN stmlist END 7 IF ID THEN stm 8 IF ID THEN stm ELSE stm 9 %entry% : \001 prog (...) 22: shift/reduce conflict (shift 23, reduce 7) on ELSE state 22 stm : IF ID THEN stm. (7) stm : IF ID THEN stm. ELSE stm (8) ELSE shift 23 END reduce 7 SEMI reduce 7 EOF reduce 7 (...) State 22 contains 1 shift/reduce conflict. 14 terminals, 5 nonterminals 10 grammar rules, 25 states

76 Precedência e Associatividade Gestão dos conflitos Gestão dos erros %{ %} %token INT PLUS MINUS TIMES DIV EOF %start expr %type <unit> expr %% expr: INT {} expr PLUS expr {} expr MINUS expr {} expr TIMES expr {} expr DIV expr {} MINUS expr {} ;

77 Precedência e Associatividade 0 $accept : %entry% $end 1 expr : INT 2 expr PLUS expr 3 expr MINUS expr 4 expr TIMES expr 5 expr DIV expr 6 MINUS expr 7 %entry% : \001 expr (...) 14: shift/reduce conflict (shift 7, reduce 5) on PLUS 14: shift/reduce conflict (shift 8, reduce 5) on MINUS 14: shift/reduce conflict (shift 9, reduce 5) on TIMES 14: shift/reduce conflict (shift 10, reduce 5) on DIV state 14 expr : expr. PLUS expr (2) expr : expr. MINUS expr (3) expr : expr. TIMES expr (4) expr : expr. DIV expr (5) expr : expr DIV expr. (5) Gestão dos conflitos Gestão dos erros PLUS shift 7 MINUS shift 8 TIMES shift 9 DIV shift 10 $end reduce 5 (...) State 14 contains 4 shift/reduce conflicts. 9 terminals, 3 nonterminals 8 grammar rules, 15 states

78 Gestão dos conflitos Gestão dos erros Precedência e Associatividade: a solução %{ %} %token INT PLUS MINUS TIMES DIV EOF %left PLUS MINUS %left TIMES DIV %left uminus %start expr %type <unit> expr %% expr: INT {} expr PLUS expr {} expr MINUS expr {} expr TIMES expr {} expr DIV expr {} MINUS expr %prec uminus {} ;

79 Conflitos reduce/reduce Gestão dos conflitos Gestão dos erros %{ %} %token ID PLUS MINUS AND OR EQUAL ASSIGN EOF %left OR %left AND %left PLUS %start stm %type <unit> stm %% stm: ID ASSIGN ae {} ID ASSIGN be {}; be: be OR be {} be AND be {} ae EQUAL ae {} ID {}; ae: ae PLUS ae {} ID {};

80 Conflitos reduce/reduce Gestão dos conflitos Gestão dos erros 0 $accept : %entry% $end 1 stm : ID ASSIGN ae 2 ID ASSIGN be 3 be : be OR be 4 be AND be 5 ae EQUAL ae 6 ID 7 ae : ae PLUS ae 8 ID 9 %entry% : \001 stm (...) 6: reduce/reduce conflict (reduce 6, reduce 8) on $end state 6 be : ID. (6) ae : ID. (8) $end reduce 6 PLUS reduce 8 AND reduce 6 OR reduce 6 EQUAL reduce 8 (...) State 6 contains 1 reduce/reduce conflict. 11 terminals, 5 nonterminals 10 grammar rules, 19 states

81 Conflitos reduce/reduce Gestão dos conflitos Gestão dos erros Aqui a dificuldade é que um identificador pode ocorrer tanto numa expressão booleana (be) como numa expressão aritmética (ae). Na analise dum identificador, que produção escolher para a redução? a regra 6 (identificador booleano) ou a regra 8 (identificador aritmético)? Nesta fase da compilação não temos forma fácil de inferir em que situação nos encontramos. Por isso o mais sensato é reescrever a gramática de tal forma que a escolha seja feita posteriormente: na análise semântica.

82 Conflitos reduce/reduce Gestão dos conflitos Gestão dos erros %{ %} %token ID PLUS MINUS AND OR EQUAL ASSIGN EOF %left OR %left AND %left PLUS %start stm %type <unit> stm %% stm: ID ASSIGN expr {}; expr: expr OR expr {} expr AND expr {} expr EQUAL expr {} expr PLUS expr {} ID {};

83 Gestão dos conflitos Gestão dos erros Gestão impĺıcita dos conflitos pelo Yacc (Documentação do OCamlYacc) The precedence declarations are used in the following way to resolve reduce/reduce and shift/reduce conflicts: Tokens and rules have precedences. By default, the precedence of a rule is the precedence of its rightmost terminal. You can override this default by using the %prec directive in the rule. A reduce/reduce conflict is resolved in favor of the first rule (in the order given by the source file), and ocamlyacc outputs a warning. A shift/reduce conflict is resolved by comparing the precedence of the rule to be reduced with the precedence of the token to be shifted. If the precedence of the rule is higher, then the rule will be reduced; if the precedence of the token is higher, then the token will be shifted. A shift/reduce conflict between a rule and a token with the same precedence will be resolved using the associativity: if the token is left-associative, then the parser will reduce; if the token is right-associative, then the parser will shift. If the token is non-associative, then the parser will declare a syntax error. When a shift/reduce conflict cannot be resolved using the above method, then ocamlyacc will output a warning and the parser will always shift.

84 Gestão dos conflitos Gestão dos erros Yacc: o token error O que acontece se o yacc detecta um erro (sintáctico) durante a análise sintáctica? Isto acontece quando a palavra actualmente analisada deixa de poder ter continuação que permita ser reconhecida. Neste caso ferramentas como yacc utilizam a técnica da correcção local do erro. Esta técnica baseia-se na introdução dum token especial, o token error, no local onde o erro foi detectado e na presença de tokens que desempenham um papel de sincronização. Esses tokens são em geral tokens de pontuação que permitam delimitar componentes importantes da linguagem em causa. o token error pode assim ser utilizado como um token normal na gramática. A sua utilização num local particular da gramática representa o facto que a produção em questão pretende tratar um eventual erro sintáctico onde o token error aparece.

85 Yacc: o token error Gestão dos conflitos Gestão dos erros Que faz o yacc com o símbolo error introduzido aquando da detecção efectiva dum erro? 1 Esvaziar a pilha de estados (se necessário) até chegar a um estado no qual uma acção para o token error seja shift. 2 Executar shift error 3 Descartar símbolos de entrada (se necessário) até atingir um estado que tenha uma acção normal (que não seja de erro ) sobre o token de antevisão (lookahead token). Este token é o token de sincronização. 4 Retomar o parsing normalmente.

86 Yacc: o token error Gestão dos conflitos Gestão dos erros Os tokens de sincronização podem ser pontuação que separam instruções. Neste caso se um erro ocorrer, vamos procurar o próximo ponto de sincronização e ignorar todo o input que ocorre entre o local de erro e este ponto. A análise pode recomeçar normalmente a seguir. I.e. deita fora toda a instrução onde o erro ocorreu e retoma a analise normalmente com a instrução seguinte.

87 Gestão dos erros pelo Yacc Gestão dos conflitos Gestão dos erros (Documentação do OCamlYacc) Error recovery is supported as follows: when the parser reaches an error state (no grammar rules can apply), it calls a function named parse error with the string syntax error as argument. The default parse error function does nothing and returns, thus initiating error recovery (see below). The user can define a customized parse error function in the header section of the grammar file. The parser also enters error recovery mode if one of the grammar actions raises the Parsing.Parse error exception. In error recovery mode, the parser discards states from the stack until it reaches a place where the error token can be shifted. It then discards tokens from the input until it finds three successive tokens that can be accepted, and starts processing with the first of these. If no state can be uncovered where the error token can be shifted, then the parser aborts by raising the Parsing.Parse error exception.

Análise Sintáctica. Definições: Conjuntos First() e Follow() Compiladores, Aula Nº 19 João M. P. Cardoso. Conjunto First(β)

Análise Sintáctica. Definições: Conjuntos First() e Follow() Compiladores, Aula Nº 19 João M. P. Cardoso. Conjunto First(β) Análise Sintáctica Compiladores, Aula Nº 19 João M. P. Cardoso 1 Definições: Conjuntos First() e Follow() 2 Notação T é terminal, NT é nãoterminal, S é terminal ou não-terminal, e α e β representam sequências

Leia mais

Compiladores - Análise SLR

Compiladores - Análise SLR Compiladores - Análise SLR Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Um exemplo que funciona Todo estado com um item de redução e algum outro item causa conflito LR(0)! A técnica LR(0)

Leia mais

Análise Sintática Bottom-up

Análise Sintática Bottom-up MAB 471 2011.2 Análise Sintática Bottom-up http://www.dcc.ufrj.br/~fabiom/comp Recapitulando parsers top-down Constróem árvore sintática da raiz até as folhas Recursão à esquerda faz parsers entrarem em

Leia mais

Revisão. Fases da dacompilação

Revisão. Fases da dacompilação 1 Revisão Prof. Julio Arakaki Julio Arakaki 1 Fases da dacompilação Código fonte Análise Léxica tokens e lexemas Análise Sintática Árvore Sintática Abstrata (ASA) Análise Semântica ASA decorada Geração

Leia mais

Análise sintática. Questão. E se a análise sintática pudesse ser modelada por autômatos?

Análise sintática. Questão. E se a análise sintática pudesse ser modelada por autômatos? Análise sintática Função, interação com o compilador Análise descendente e ascendente Especificação e reconhecimento de cadeias de tokens válidas Implementação Tratamento de erros Prof. Thiago A. S. Pardo

Leia mais

Compiladores - Análise Ascendente

Compiladores - Análise Ascendente Compiladores - Análise Ascendente Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Descendente vs. Ascendente As técnicas de análise que vimos até agora (recursiva com retrocesso,

Leia mais

Compiladores - Análise Ascendente

Compiladores - Análise Ascendente Compiladores - Análise Ascendente Fabio Mascarenhas - 2013.2 http://www.dcc.ufrj.br/~fabiom/comp Análise Descendente vs. Ascendente As técnicas de análise que vimos até agora (recursiva com retrocesso,

Leia mais

Análise Sintática (Cap. 04) Análise Sintática Ascendente Analisador Sintático LR

Análise Sintática (Cap. 04) Análise Sintática Ascendente Analisador Sintático LR Análise Sintática (Cap. 04) Análise Sintática Ascendente Analisador Sintático LR Análise Sintática LR Analisadores sintáticos LR(k): L, verificação da entrada da esquerda para direita R, constrói a derivação

Leia mais

Análise Sintática - Final

Análise Sintática - Final MAB 471 2011.2 Análise Sintática - Final http://www.dcc.ufrj.br/~fabiom/comp LR(k ) vs LL(k ) Encontrando o próximo passo em uma derivação LR(k) Cada redução na análise detectável com o contexto esquerdo

Leia mais

Compiladores. Top-Down x Bottom Up. Plano da aula. Redução exemplo 1. Redução exemplo 1. Lembrando: construir a tabela de análise LL(1) A Abc b B d

Compiladores. Top-Down x Bottom Up. Plano da aula. Redução exemplo 1. Redução exemplo 1. Lembrando: construir a tabela de análise LL(1) A Abc b B d Compiladores Análise sintática ) Análise ascendente Autômatos Empilhar/Reduzir Lembrando: construir a tabela de análise LL) Como fazer? Re-escrever gramática para satisfazer condições de LL) Calcular conjuntos

Leia mais

Reduce: reduz o que está imediatamente à esquerda do foco usando uma produção

Reduce: reduz o que está imediatamente à esquerda do foco usando uma produção Shift e reduce Shift: move o foco uma posição à direita A B C x y z A B C x y z é uma ação shift Reduce: reduz o que está imediatamente à esquerda do foco usando uma produção Se A x y é uma produção, então

Leia mais

Análise Bottom-Up. Compiladores. Parsing LR. Tabela Ações/Transições. Análise LR. Construindo tabelas LR

Análise Bottom-Up. Compiladores. Parsing LR. Tabela Ações/Transições. Análise LR. Construindo tabelas LR Análise Bottom-Up Compiladores Análise sintática 5) Gramáticas SLR), LR) e LALR String Entrada -> Símbolo Inicial Regras aplicadas em reverso adiar decisões mais poderoso Noção de handle, redução, uso

Leia mais

Análise sintática. Análise sintática ascendente. Bottom-up, ascendente ou redutiva. Analisadores de precedência de operadores Analisadores LR

Análise sintática. Análise sintática ascendente. Bottom-up, ascendente ou redutiva. Analisadores de precedência de operadores Analisadores LR Análise sintática Função, interação com o compilador Análise descendente e ascendente Especificação e reconhecimento de cadeias de tokens válidas Implementação Tratamento de erros Prof. Thiago A. S. Pardo

Leia mais

V Teoria de Parsing. Termos Básicos: Parser Analisador Sintático Parsing Analise Sintática Parse Representação da analise efetuada

V Teoria de Parsing. Termos Básicos: Parser Analisador Sintático Parsing Analise Sintática Parse Representação da analise efetuada V Teoria de Parsing Termos Básicos: Parser Analisador Sintático Parsing Analise Sintática Parse Representação da analise efetuada Ascendentes: S + x (* Seq. Invertida Reducao *) dir Exemplo: Descendentes:

Leia mais

Analisadores Sintáticos LR

Analisadores Sintáticos LR FACULDADE ANGLO AMERICANO FOZ DO IGUAÇU Curso de Ciência da Computação 7º Periodo Disciplina: Compiladores Prof. Erinaldo Sanches Nascimento Analisadores Sintáticos LR SLR LR Canônicos LALR Analisadores

Leia mais

V Análise Sintática. V.1.1 Gramáticas Livres de Contexto Definições de GLC

V Análise Sintática. V.1.1 Gramáticas Livres de Contexto Definições de GLC V Análise Sintática V.1 Fundamentos Teóricos V.1.1 G.L.C V.1.2 Teoria de Parsing V.2 Especificação Sintática de Ling. de Prog. V.3 - Implementação de PARSER s V.4 - Especificação Sintática da Linguagem

Leia mais

INE5317 Linguagens Formais e Compiladores. AULA 10: Anális e S intática

INE5317 Linguagens Formais e Compiladores. AULA 10: Anális e S intática INE5317 Linguagens Formais e Compiladores AULA 10: Anális e S intática baseado em material produzido pelo prof Paulo B auth Menezes e pelo prof Olinto Jos é Varela Furtado Ricardo Azambuja Silveira INE-CTC-UFSC

Leia mais

Folha 4.2 Análise sintática ascendente

Folha 4.2 Análise sintática ascendente Folha 4.2 Análise sintática ascendente 1. Considere a gramática G = (S, T, P, S) que representa o cabeçalho de métodos na linguagem Java (sem os modificadores de acesso), onde T = {S, Type, Param, Exception,

Leia mais

Compiladores - Análise LL(1)

Compiladores - Análise LL(1) Compiladores - Análise LL(1) Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Gramáticas LL(1) Uma gramática é LL(1) se toda predição pode ser feita examinando um único token à frente Muitas

Leia mais

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Análise sintática Parte 05 Prof. geovanegriesang@unisc.br Data Conteúdo 23/09/2013 3. Análise Sintática: 3.1 analisadores

Leia mais

Compiladores. Exemplo. Caraterísticas de Gramáticas. A αβ 1 αβ 2. A αx X β 1 β 2. Lembrando... Gramáticas Livres de Contexto

Compiladores. Exemplo. Caraterísticas de Gramáticas. A αβ 1 αβ 2. A αx X β 1 β 2. Lembrando... Gramáticas Livres de Contexto Compiladores Análise sintática (2) Análise Top-Down Lembrando... Gramáticas Livres de Contexto Análise sintática = parsing. Baseada em GLCs Gramática: S A B Top-Down Bottom-Up S AB cb ccbb ccbca S AB A

Leia mais

Análise sintática. Prof. Thiago A. S. Pardo. Análise sintática ascendente

Análise sintática. Prof. Thiago A. S. Pardo. Análise sintática ascendente Análise sintática Função, interação com o compilador Análise descendente e ascendente Especificação e reconhecimento de cadeias de tokens válidas Implementação Tratamento de erros Prof. Thiago A. S. Pardo

Leia mais

Compiladores - Análise LL(1)

Compiladores - Análise LL(1) Compiladores - Análise LL(1) Fabio Mascarenhas 2017.1 http://www.dcc.ufrj.br/~fabiom/comp Gramáticas LL(1) Uma gramática é LL(1) se toda predição pode ser feita examinando um único token à frente Muitas

Leia mais

INE5318 Construção de Compiladores. AULA 4: Análise Sintática

INE5318 Construção de Compiladores. AULA 4: Análise Sintática INE5318 Construção de Compiladores AULA 4: Análise Sintática Ricardo Azambuja Silveira INE CTC UFSC E Mail: silveira@inf.ufsc.br URL: www.inf.ufsc.br/~silveira Definições preliminares Parser (Analisador

Leia mais

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Análise sintática Parte 02 Prof. geovanegriesang@unisc.br Data Conteúdo 23/09/2013 3. Análise Sintática: 3.1 analisadores

Leia mais

Análise Sintática I. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 42

Análise Sintática I. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 42 Análise Sintática I Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Abril, 2017 1 / 42 Sumário 1 Introdução 2 Derivações 3 Ambiguidade 4 Análise sintática descendente

Leia mais

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Análise sintática Parte 04 Prof. geovanegriesang@unisc.br Data Conteúdo 23/09/2013 3. Análise Sintática: 3.1 analisadores

Leia mais

Compiladores - JACC. Fabio Mascarenhas

Compiladores - JACC. Fabio Mascarenhas Compiladores - JACC Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp JACC Gerador de analisadores sintáticos LALR que gera código Java Sintaxe baseada na sintaxe do YACC (e de muitos outros

Leia mais

Vantagens de uma Gramática. Sintaxe de uma Linguagem. Analisador Sintático - Parser. Papel do Analisador Sintático. Tiposde Parsers para Gramáticas

Vantagens de uma Gramática. Sintaxe de uma Linguagem. Analisador Sintático - Parser. Papel do Analisador Sintático. Tiposde Parsers para Gramáticas Sintaxe de uma Linguagem Cada LP possui regras que descrevem a estrutura sintática dos programas. specificada através de uma gramática livre de contexto, BNF (Backus-Naur Form). 1 Vantagens de uma Gramática

Leia mais

Linguagens de Domínio Específico

Linguagens de Domínio Específico Linguagens de Domínio Específico Fabio Mascarenhas 2016.1 http://www.dcc.ufrj.br/~fabiom/dsl Processamento de uma DSL Análise Sintática Descendente O analisador sintático descendente é parecido com o analisador

Leia mais

Compiladores Ficha de exercícios práticos

Compiladores Ficha de exercícios práticos Compiladores Ficha de exercícios práticos Simão Melo de Sousa Ano lectivo 2004/2005 O objectivo desta ficha é a implementação dos pequenos programas ou funções sugeridos pelo enunciado dos exercícios seguintes.

Leia mais

Análise Sintática II. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 34

Análise Sintática II. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 34 Análise Sintática II Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Outubro, 2016 1 / 34 Sumário 1 Introdução 2 Ambiguidade 3 Análise sintática descendente 4

Leia mais

Como construir um compilador utilizando ferramentas Java

Como construir um compilador utilizando ferramentas Java Como construir um compilador utilizando ferramentas Java p. 1/2 Como construir um compilador utilizando ferramentas Java Aula 6 Análise Sintática Prof. Márcio Delamaro delamaro@icmc.usp.br Como construir

Leia mais

Linguagens Livres de Contexto

Linguagens Livres de Contexto Linguagens Livres de Contexto 1 Roteiro Gramáticas livres de contexto Representação de linguagens livres de contexto Formas normais para gramáticas livres de contexto Gramáticas ambíguas Autômatos de Pilha

Leia mais

Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal

Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal Árvores de Sintaxe Abstracta Simão Melo de Sousa Computer Science Department University of Beira Interior, Portugal Plano 1 Accções semânticas em Gramáticas Livres de Contexto Valores Semânticos em Gramáticas

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 04 Sintaxe e Semântica Edirlei Soares de Lima Sintaxe e Semântica A descrição de uma linguagem de programação envolve dois aspectos principais:

Leia mais

Compiladores. Prof. Bruno Moreno Aula 8 02/05/2011

Compiladores. Prof. Bruno Moreno Aula 8 02/05/2011 Compiladores Prof. Bruno Moreno Aula 8 02/05/2011 RECONHECIMENTO DE TOKENS Reconhecimento de Tokens Até aqui aprendemos a identificar tokens Para reconhecimento, a única abordagem utilizada foi árvores

Leia mais

Compiladores Analisador Sintático. Prof. Antonio Felicio Netto Ciência da Computação

Compiladores Analisador Sintático. Prof. Antonio Felicio Netto Ciência da Computação Compiladores Analisador Sintático Prof. Antonio Felicio Netto antonio.felicio@anhanguera.com Ciência da Computação 1 Análise Sintática - A Análise Sintática constitui a segunda fase de um tradutor de uma

Leia mais

Análise sintática. Análise sintática ascendente. Parte-se dos símbolos terminais em direção ao símbolo inicial da gramática. Derivação mais à direita

Análise sintática. Análise sintática ascendente. Parte-se dos símbolos terminais em direção ao símbolo inicial da gramática. Derivação mais à direita Análise sintática Função, interação com o compilador Análise descendente e ascendente Especificação e reconhecimento de cadeias de tokens válidas Implementação Tratamento de erros Prof. Thiago A. S. Pardo

Leia mais

Plano da aula. Compiladores. Os erros típicos são sintáticos. Análise Sintática. Usando Gramáticas. Os erros típicos são sintáticos

Plano da aula. Compiladores. Os erros típicos são sintáticos. Análise Sintática. Usando Gramáticas. Os erros típicos são sintáticos Plano da aula Compiladores Análise sintática (1) Revisão: Gramáticas Livres de Contexto 1 Introdução: porque a análise sintática? Noções sobre Gramáticas Livres de Contexto: Definição Propriedades Derivações

Leia mais

Compiladores Ficha de exercícios

Compiladores Ficha de exercícios Compiladores Ficha de exercícios Simão Melo de Sousa Ano lectivo 2004/2005 1 Linguagens Formais: Construir Frases Exercício 1 Para cada uma das gramáticas G seguintes, (a) descreva a linguagem L(G) gerada

Leia mais

BNF (Backus-Naur Form) Gramática Livres de Contexto / Estruturas Recursivas

BNF (Backus-Naur Form) Gramática Livres de Contexto / Estruturas Recursivas Sintae => Usualmente Gramática Livre do Conteto (GLC) BNF (Backus-Naur Form) Gramática Livres de Conteto / struturas Recursivas comando => IF epressao THN epressao LS epressao epressao => (epressao) OR

Leia mais

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1 Definição de uma Linguagem Linguagem= sintaxe + semântica Especificação da sintaxe: gramática livre de contexto, BNF (Backus-Naur Form) Especificação Semântica: informal (textual), operacional, denotacional,

Leia mais

Análise Sintática Introdução

Análise Sintática Introdução Análise Sintática Introdução Renato Ferreira Linguagens e Automatas Linguagens formais são importantes em Computação Especialmente em linguagens de programação Linguagens regulares A linguagem formal mais

Leia mais

LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior. LFA Aula 09 Gramáticas e Linguagens Livres de Contexto (Hopcroft, 2002) 18/01/2016 Celso Olivete Júnior olivete@fct.unesp.br www.fct.unesp.br/docentes/dmec/olivete/lfa 1 Classes Gramaticais Linguagens

Leia mais

Compiladores - Análise Recursiva

Compiladores - Análise Recursiva Compiladores - Análise Recursiva Fabio Mascarenhas 2015.2 http://www.dcc.ufrj.br/~fabiom/comp Geradores x Reconhecedores A definição formal de gramática dá um gerador para uma linguagem Para análise sintática,

Leia mais

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 31. Instituto de C

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 31. Instituto de C ompiladores Análise Léxica Bruno Lopes Bruno Lopes ompiladores 1 / 31 Front-end Lida com a linguagem de entrada Teste de pertinência: código fonte linguagem fonte? Programa está bem formado? Sintaticamente?

Leia mais

Construção de Compiladores Aula 18 - Análise Sintática Ascendente

Construção de Compiladores Aula 18 - Análise Sintática Ascendente Construção de Compiladores Aula 18 - Análise Sintática Ascendente Bruno Müller Junior Departamento de Informática UFPR 10 de Novembro de 2014 Bruno Müller 5 Implementação Junior Departamento de Informática

Leia mais

Análise Sintática (Cap. 04) Análise Sintática Descendente

Análise Sintática (Cap. 04) Análise Sintática Descendente (Cap. 04) Análise Sintática Descendente Análise Sintática Análise sintática descendente Constrói a árvore de derivação de cima para baixo, da raíz para as folhas, criando os nós da árvore em pré ordem

Leia mais

Folha 4.1 Análise sintática descendente

Folha 4.1 Análise sintática descendente 1. Dada a seguinte gramática G = (Σ, T, P, S), onde : Σ = { S, A, B } T = { a, b, c } S a b A c A A a S b S c B B a B b S b) Verifique que G é do tipo LL(1). c) Construa a tabela sintática predicativa

Leia mais

Compilação: Erros. Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão. * Analisadores Botton-Up: - Shift-Reduce (SLR)

Compilação: Erros. Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão. * Analisadores Botton-Up: - Shift-Reduce (SLR) Compilação: Erros Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão * Analisadores Botton-Up: - Shift-Reduce (SLR) * Erros no Lex * Erros no Yacc * Erros na Definição da

Leia mais

Problemas decidíveis para LICs

Problemas decidíveis para LICs Problemas decidíveis para LICs Dada uma gramática independente de contexto G, L(G) =? Dada uma gramática independente de contexto G, L(G) é finita? Dada uma gramática independente de contexto G, L(G) é

Leia mais

I LINGUAGENS E PROCESSADORES: INTRODUÇÃO 1

I LINGUAGENS E PROCESSADORES: INTRODUÇÃO 1 PREÂMBULO PREFÂCIO xiii xv I LINGUAGENS E PROCESSADORES: INTRODUÇÃO 1 1 1.1 1.1.1 1.1.2 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 2 2.1 2.2 2.2.1 2.2.2 2.3 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.4 2.4.1 2.4.2

Leia mais

Compiladores - Autômatos

Compiladores - Autômatos Compiladores - Autômatos Fabio Mascarenhas 2015.1 http://www.dcc.ufrj.br/~fabiom/comp Especificação x Implementação Usamos expressões regulares para dar a especificação léxica da linguagem Mas como podemos

Leia mais

Análise Sintática. Compiladores Cristina C. Vieira. Compiladores 2012/2013

Análise Sintática. Compiladores Cristina C. Vieira. Compiladores 2012/2013 Análise Sintática Compiladores Cristina C. Vieira 1 Árvore Sintática Nós internos: símbolos não-terminais Folhas: símbolos terminais Arcos: de símbolos não-terminais do LHS da produção para nós do RHS

Leia mais

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 12. Instituto de C

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 12. Instituto de C ompiladores Análise Sintática Bruno Lopes Bruno Lopes ompiladores 1 / 12 Front-end Lida com a linguagem de entrada Teste de pertinência: código fonte linguagem fonte? Programa está bem formado? Sintaticamente?

Leia mais

Compiladores - Gramáticas

Compiladores - Gramáticas Compiladores - Gramáticas Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Sintática A análise sintática agrupa os tokens em uma árvore sintática de acordo com a estrutura do programa

Leia mais

Analisadores Descendentes Tabulares; Cjs First Follow

Analisadores Descendentes Tabulares; Cjs First Follow Conteúdo da aula nalisadores Descendentes Tabulares; Cjs First Follow Marcelo Johann nalisadores Descendentes Recursivos com Retrocesso Recursivos Preditivos Conjunto FIRT e Implementação nalisador Preditivo

Leia mais

Compiladores - Gramáticas

Compiladores - Gramáticas Compiladores - Gramáticas Fabio Mascarenhas 2018.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Sintática A análise sintática agrupa os tokens em uma árvore sintática de acordo com a estrutura do programa

Leia mais

Linguagens Formais e Autômatos

Linguagens Formais e Autômatos Linguagens Formais e Autômatos Gramáticas Livre do Contexto (GLC) Cristiano Lehrer, M.Sc. Linguagens Livres do Contexto (1/2) Seu estudo é de fundamental importância na informática: Compreende um universo

Leia mais

Compiladores I. Caracterizar um método de análise bottom-up. Compreender os mecanismos básicos envolvidos no processo de análise LR.

Compiladores I. Caracterizar um método de análise bottom-up. Compreender os mecanismos básicos envolvidos no processo de análise LR. Compiladores I Gerson Geraldo Homrich Cavalheiro Caracterizar um método de análise bottom-up Compreender oecanismos básicos envolvidos no processo de análise LR Oferecer as bases para utilização de uma

Leia mais

Compilação da linguagem Panda

Compilação da linguagem Panda Construção de Compiladores I [BCC328] Atividades Práticas Compilação da linguagem Panda Departamento de Computação Universidade Federal de Ouro Preto Prof. José Romildo Malaquias 22 de abril de 2015 Resumo

Leia mais

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática Universidade de Santa Cruz do Sul UNISC Departamento de informática COPILADORES Análise sintática Parte 03 Prof. geovanegriesang@unisc.br Analisador sem recursão Analisador sintático sem recursão pode

Leia mais

Introdução Análise Sintática Descendente Análise Sintática Ascendente. Aula Prática. Fernando Antônio Asevedo Nóbrega

Introdução Análise Sintática Descendente Análise Sintática Ascendente. Aula Prática. Fernando Antônio Asevedo Nóbrega Análise Sintática Aula Prática Fernando Antônio Asevedo Nóbrega Instituto de Ciências Matemáticas e de Computação USP SCC-206 Introdução à Compilação 9 de maio de 2012 1 / 16 Agenda 1 Introdução 2 Análise

Leia mais

Analisadores Ascendentes ou Empilha-Reduz. Mais um exemplo... Mais um exemplo... Top-Down x Bottom Up. Conteúdo da aula. Analisadores Ascendentes

Analisadores Ascendentes ou Empilha-Reduz. Mais um exemplo... Mais um exemplo... Top-Down x Bottom Up. Conteúdo da aula. Analisadores Ascendentes Conteúdo da aula Analisadores Ascendentes ou mpilha-reduz Marcelo Johann Analisadores Ascendentes uncionamento Analisadores de Precedência de Operadores Analisadores LR(k) SLR - Simple LR (estudaremos

Leia mais

Análise Sintática. Fabiano Baldo

Análise Sintática. Fabiano Baldo Compiladores Análise Sintática Fabiano Baldo Gramáticas Livre de Contexto (GLC) É utilizada na especificação formal lda sintaxe de uma linguagem de programação. É um conjunto de produções ou regras gramaticais

Leia mais

Earley Parser. CT200 - Fundamentos de Autômatas e Linguagens Formais. Israel C.S. Rocha

Earley Parser. CT200 - Fundamentos de Autômatas e Linguagens Formais. Israel C.S. Rocha MESTRADO EM ENGENHARIA ELETRÔNICA E COMPUTAÇÃO MASTER IN ELECTRONIC AND COMPUTER ENGINEERING São José dos Campos São Paulo - Brasil Earley Parser CT200 - Fundamentos de Autômatas e Linguagens Formais Prof.:

Leia mais

Compiladores - Análise Léxica

Compiladores - Análise Léxica Compiladores - Análise Léxica Fabio Mascarenhas 2017.2 http://www.dcc.ufrj.br/~fabiom/comp Introdução Primeiro passo do front-end: reconhecer tokens Tokens são as palavras do programa O analisador léxico

Leia mais

MAB Análise Sintática. Wednesday, August 31, 11

MAB Análise Sintática.  Wednesday, August 31, 11 MAB 471 2011.2 Análise Sintática http://www.dcc.ufrj.br/~fabiom/comp O Front End Código fonte Scanner tokens Parser IR Erros Parser Verifica a corretude gramatical da sequência de palavras e categorias

Leia mais

Compiladores Aula 4. Celso Olivete Júnior.

Compiladores Aula 4. Celso Olivete Júnior. Aula 4 Celso Olivete Júnior olivete@fct.unesp.br Na aula de hoje... Revisão: gramáticas Relações em uma gramática: Cabeça, Último, Primeiro (First) e Seguinte (Follow) Capítulo 4 (seção 4.4.2) do livro

Leia mais

Compiladores - Análise Preditiva

Compiladores - Análise Preditiva Compiladores - Análise Preditiva Fabio Mascarenhas 205.2 http://www.dcc.ufrj.br/~fabiom/comp Analisador Preditivo Uma simplificação do parser recursivo com retrocesso que é possível para muitas gramáticas

Leia mais

Compiladores - Análise Recursiva

Compiladores - Análise Recursiva Compiladores - Análise Recursiva Fabio Mascarenhas - 2013.2 http://www.dcc.ufrj.br/~fabiom/comp Analisador Recursivo Maneira mais simples de implementar um analisador sintático a partir de uma gramática,

Leia mais

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA) Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA) Análise Léxica A primeira fase da compilação Recebe os caracteres de entrada do programa e os converte em um fluxo de

Leia mais

Compiladores. Análise Léxica

Compiladores. Análise Léxica Compiladores Análise Léxica Cristiano Lehrer, M.Sc. Introdução (1/3) Análise léxica é a primeira fase do compilador. A função do analisador léxico, também denominado scanner, é: Fazer a leitura do programa

Leia mais

Problemas decidíveis para LICs

Problemas decidíveis para LICs Problemas decidíveis para LICs Dada uma gramática independente de contexto G, L(G) =? Dada uma gramática independente de contexto G, L(G) é finita? Dada uma gramática independente de contexto G, L(G) é

Leia mais

Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal

Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal Análise Sintáctica Simão Melo de Sousa Computer Science Department University of Beira Interior, Portugal Plano 1 2 3 4 Eliminar a Recursividade Esquerda Factorizar a Esquerda Plano 1 2 3 4 Alvo? Lembrete

Leia mais

Concurso Público para provimento de cargo efetivo de Docentes. Edital 20/2015 CIÊNCIA DA COMPUTAÇÃO II Campus Rio Pomba

Concurso Público para provimento de cargo efetivo de Docentes. Edital 20/2015 CIÊNCIA DA COMPUTAÇÃO II Campus Rio Pomba Questão 01 No processo de construção de compiladores, é essencial compreender e manipular as expressões regulares e suas equivalências. Dentro desse contexto, seja o alfabeto = {a, b, c, d, e} e a seguinte

Leia mais

Linguagens de Programação Aula 4

Linguagens de Programação Aula 4 Aula 4 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada... Autômatos finitos AF:exemplos... Cadeia de caracteres a,b,c 2/82 Na aula passada... Autômatos finitos AF:exemplos... Números inteiros(com

Leia mais

Gramáticas e Linguagens independentes de contexto

Gramáticas e Linguagens independentes de contexto Capítulo 6 Gramáticas e Linguagens independentes de contexto 6.1 Gramáticas Nesta secção vamos introduzir gramáticas formais para caracterização das linguagens, estudando fundamentalmente as gramáticas

Leia mais

Teoria da Computação Gramáticas, Linguagens Algébricas e Autómatos de Pilha

Teoria da Computação Gramáticas, Linguagens Algébricas e Autómatos de Pilha Teoria da Computação Gramáticas, Linguagens Algébricas e Autómatos de Pilha Simão Melo de Sousa 12 de Outubro de 2011 Conteúdo 1 Gramáticas e Definições básicas 1 2 Gramáticas e Linguagens 4 2.1 Gramáticas

Leia mais

Compiladores - Análise Léxica

Compiladores - Análise Léxica Compiladores - Análise Léxica Fabio Mascarenhas 2018.1 http://www.dcc.ufrj.br/~fabiom/comp Introdução Primeiro passo do front-end: reconhecer tokens Tokens são as palavras do programa O analisador léxico

Leia mais

Processamento de Linguagens I LESI + LMCC (3 o ano)

Processamento de Linguagens I LESI + LMCC (3 o ano) Processamento de Linguagens I LESI + LMCC (3 o ano) 4 o Ficha Prática Ano Lectivo de 05/06 1 Objectivos Este ficha prática contém exercícios para serem resolvidos nas aulas teórico-práticas com vista a

Leia mais

Notação EBNF BNF estendida Notação usada com o YACC (gerador de parsers Bottom-up)

Notação EBNF BNF estendida Notação usada com o YACC (gerador de parsers Bottom-up) Notação EBNF BNF estendida Notação usada com o YACC (gerador de parsers Bottom-up) 1 Notações BNF: já vista EBNF: existem pelo menos 3 estilos principais de BNF estendidas Derivada de expressões regulares

Leia mais

Análise Sintática II: Analisadores Descendentes Preditivos

Análise Sintática II: Analisadores Descendentes Preditivos Análise Sintática II: Analisadores Descendentes Preditivos Exercícios LL(1) = Left to right, Left-most derivation, 1 símbolo look-ahead 1. LL(1): definição 2. Para toda produção A -> α β Se β =>* λ, então

Leia mais

MAB Análise Sintática. Wednesday, April 4, 12

MAB Análise Sintática.  Wednesday, April 4, 12 MAB 471 2012.2 Análise Sintática http://www.dcc.ufrj.br/~fabiom/comp O Front End Código fonte Scanner tokens Parser IR Erros Parser Verifica a corretude gramatical da sequência de palavras e categorias

Leia mais

Construção de Compiladores Aula 3 - Analisador Sintático

Construção de Compiladores Aula 3 - Analisador Sintático Construção de Compiladores Aula 3 - Analisador Sintático Bruno Müller Junior Departamento de Informática UFPR 20 de Agosto de 2014 Definição A análise sintática (parsing) é um processo que verifica se

Leia mais

Compiladores. Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal. S. Melo de Sousa Compiladores

Compiladores. Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal. S. Melo de Sousa Compiladores Compiladores Verificação e inferência dos Tipos Simão Melo de Sousa Computer Science Department University of Beira Interior, Portugal Problema Permitir evitar declarar o tipo das variáveis, das assinaturas

Leia mais

As linguagens regulares são I.C Proposição Qualquer linguagem regular é independente de contexto.

As linguagens regulares são I.C Proposição Qualquer linguagem regular é independente de contexto. As linguagens regulares são I.C Proposição 16.1. Qualquer linguagem regular é independente de contexto. Dem. Seja L Σ uma linguagem regular, e seja r uma expressão regular tal que L = L(r).Por indução

Leia mais

Apresentação. !! Familiarização com os métodos de construção de compiladores de linguagens e com as técnicas de compilação mais habituais.

Apresentação. !! Familiarização com os métodos de construção de compiladores de linguagens e com as técnicas de compilação mais habituais. Apresentação Universidade dos Açores Departamento de Matemática www.uac.pt/~hguerra/!! Aquisição de conceitos sobre a definição de linguagens de programação.!! Familiarização com os métodos de construção

Leia mais

Análise Sintática. Análise Sintática. Tipos de Analisadores Gramáticais: PARSERS

Análise Sintática. Análise Sintática. Tipos de Analisadores Gramáticais: PARSERS Análise Sintática Tipos de Analisadores Gramáticais: PARSERS * Analisadores TOP-DOWN: Árvore de derivação começa pela raiz indo para as folhas => Análise Descendente Tipo LL(1): Left to right / Leftmost

Leia mais

Compiladores - Especificando Sintaxe

Compiladores - Especificando Sintaxe Compiladores - Especificando Sintaxe Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Sintática A análise sintática agrupa os tokens em uma árvore sintática de acordo com a estrutura

Leia mais

Autômato com pilha. IBM1088 Linguagens Formais e Teoria da Computação. Evandro Eduardo Seron Ruiz

Autômato com pilha. IBM1088 Linguagens Formais e Teoria da Computação. Evandro Eduardo Seron Ruiz Autômato com pilha IBM1088 Linguagens Formais e Teoria da Computação Evandro Eduardo Seron Ruiz evandro@usp.br Departmento de Computação e Matemática FFCLRP Universidade de São Paulo E.E.S Ruiz (DCM USP)

Leia mais

Capítulo 5 Análise sintática

Capítulo 5 Análise sintática Capítulo 5 1. Objetivo 2. Estratégias gerais de parsing 3. descendente (top-down) 3.1. Analisador sintático com retrocesso (backtracking) 3.2. Analisador sintático predicativo recursivo 3.3. Analisador

Leia mais

Linguagens Formais e Autômatos. Simplificação de Gramáticas Livre do Contexto (GLC)

Linguagens Formais e Autômatos. Simplificação de Gramáticas Livre do Contexto (GLC) Linguagens Formais e Autômatos Simplificação de Gramáticas Livre do Contexto (GLC) Cristiano Lehrer, M.Sc. Gramática Simplificada Gramática simplificada é uma gramática livre do contexto que não apresenta

Leia mais

Linguagens e Programação BISON. Paulo Proença

Linguagens e Programação BISON. Paulo Proença Linguagens e Programação BISON BISON Gerador de analisadores sintáticos. Converte uma gramática independente de contexto LARL(1) 1 num programa C capaz de processar frases da linguagem. Gramática LARL(1)

Leia mais

Linguagens e Programação Gramáticas. Paulo Proença

Linguagens e Programação Gramáticas. Paulo Proença Linguagens e Programação Gramáticas Gramáticas Ferramenta para a descrição e análise de linguagens; Baseada num conjunto de regras que especificam o modo de construção das frases válidas na linguagem;

Leia mais

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPIADORES Análise sintática Analisadores Sintáticos R mais poderosos - R canônico, e - AR Prof. geovanegriesang@unisc.br Toda gramática

Leia mais

Exemplo preliminar. Considere a linguagem dos Palíndromos Lpal:

Exemplo preliminar. Considere a linguagem dos Palíndromos Lpal: a n b n 1 Exemplo preliminar Considere a linguagem dos Palíndromos Lpal: radar, Roma é amor, 0110, 11011,... ou seja, quando w = w r Lpal é regular? usando o Lema do Bombeamento: Suponha Lpal regular,

Leia mais