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

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

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

Transcrição

1 Análise Sintáctica Simão Melo de Sousa Computer Science Department University of Beira Interior, Portugal

2 Plano Eliminar a Recursividade Esquerda Factorizar a Esquerda

3 Plano

4 Alvo?

5 Lembrete Uma gramática livre de contexto (ou ainda algébrica) G = (N, T, S, P) é definida por dois alfabetos disjuntos: N (conjuntos dos símbolos não terminais) e T (conjunto dos símbolos terminais). Dos elementos de N destacamos um símbolo particular o símbolo S que é o símbolo inicial. O conjunto P de G é o conjunto das produções gramaticais. P N (N T ) cujos seus elementos são notados por X ::= ω ou X ω (com X N e ω (N T ) ). α deriva-se num passo (ou etapa) em β na gramática G (notação α = β) se α = α 1 X α 2, β = α 1 ωα 2 e (X ::= ω) P Uma derivação em zero ou mais passos (notada transitivo de =. = ) é o fecho reflexivo A palavra m T é reconhecida pela gramática G = (N, T, P, S) se S Designamos por L(G) o conjunto das palavras reconhecidas por G. É a linguagem reconhecida por G. = m.

6 Lembrete Seja α 1 = α 2 = α 3 =... = α n uma derivação. A cada passo escolhemos e desenvolvemos um Não-terminal. Dizemos que esta derivação é uma derivação esquerda se escolhemos sistematicamente o não terminal mais a esquerda. Dizemos que é uma derivação direita se escolhemos sistematicamente o não terminal mais a direita. Dizemos que é uma derivação máxima se α n T (ou seja já não é possível estender a derivação com mais um passo, visto α n não conter mais não-terminais). Vamos nesta lição contemplar exclusivamente gramáticas ditas reduzidas e atingíveis. G é reduzida quando: A N, m T, A = m G é atingível quando: A N, α, β (N T ), S = αaβ

7 Lembrete Propriedades interessantes das gramáticas livres de contexto: α 1, α 2 (N T ), Se (α 1α 2 = β) Então β 1, β 2 (N T ), α 1 = β 1 α 2 = β 2 β = β 1β 2 Esta propriedade justifica o nome de livres de contexto. Ou seja A palavra gerada por α 1 é gerada de forma independente (livremente) da palavra α 2, dito de outra forma, α 1 não incide em α 2 e reciprocamente.

8 Lembrete E ::= E + E Dada a gramática E ::= E * E E ::= x Apresentamos a seguir duas derivações esquerda e duas árvores de derivação de x+x*x (que demonstram da ambiguidade da gramática considerada). E = E + E = x + E = x + E E = x + x E = x + x x E = E E = E + E E = x + E E = x + x E = x + x x

9 Lembrete Uma gramática é ambígua se existir uma palavra reconhecida por pelo menos duas árvores de derivação. Caso contrário diz-se que a gramática é não-ambígua. As linguagens geradas por gramáticas livres de contexto coincidem exactamente com as linguagens reconhecidas por autómatos com pilhas (pushdown automata). {a n b n n N} é livre de contexto mas já não é o caso de {a n b n c n n N} (neste último caso é preciso memorizar n uma vez e utiliza-lo duas vezes. Isto não é possível com uma única pilha) o primeiro exemplo corresponde a gramática com as produções seguintes: S ::= asb e S ::= ɛ

10 Lembrete Decidabilidade e Gramática: Não é decidível saber se uma gramática livre de contexto é ambígua duas gramáticas livres de contexto são equivalentes (reconhecem a mesma linguagem) se a intersecção de duas gramáticas livres de contexto é vazia ou ascendente: Analisar uma palavra = estabelecer se uma palavra pertence ou não a linguagem gerada pela gramática considerada. Em prática: reconhecer = construir uma árvore de derivação. Construção da raíz para as folhas: Analise Descendente (em particular analise LL) Construção das folhas para a raíz: Analise Ascendente (em particular analise LR)

11 Plano

12 Definição do Autómato com Pilha Reconhecer linguagens regulares = autómatos finitos Reconhecer linguagens livres de contexto = autómatos com pilha Num autómato finito, numa transição entre dois estados como por exemplo: 1 a 2, passar de 1 para 2 basta que a entrada forneça um a. Num autómato com pilha, a diferença é que a transição é executada tendo em conta igualmente um histórico das sequências de caracteres já analisados: pilha = histórico

13 Definição do Autómato com Pilha Conjunto dos estados: Q Estado inicial: q 0 Q Estados finais: F Q Histórico/pilha: Q + Função/relação de transição: Q + (A {ɛ}) Q Princípio: A cada estado está associada uma palavra de Q + : a pilha. Uma transição = uma transformação no topo da pilha Consideremos a transição por x de m 1 Q + para m 2 Q (notação m 1 m 2), então queremos que qualquer que seja a pilha com prefixo m 1, digamos mm 1, fosse possível utilizar esta transição de cada vez que a x entrada apresente x. Notação mm 1 mm2 Extendemos às palavras de (A {ɛ}). Se m 1 ω 1 m 2 e m 2 ω 2 m 3 então m 1 ω 1 ω 2 m 3

14 Definição do Autómato com Pilha ω Uma palavra ω é reconhecida por um autómato com pilha se q 0 mf com f F no topo da pilha. Um autómato com pilha é determinista se e só se m 1m 2m 1m 2 Q e a, a a (A {ɛ}), se (m 1 m 2), (m 1 a m 2) e m 1 prefixo de m 1 então ambos reduzem para a mesma configuração ou seja temos necessariamente m 1 = m 1, m2 = m 2 e a = a (não há divergência possível).

15 Construção dum autómato com pilha a partir duma CFG Seja G = (N, T, S, P) uma gramática livre de contexto. Vamos considerar todos os pares possíveis (Y, α, β), designados de item, tais que Y N, α, β (N T ) e (Y ::= αβ) P. Notação [Y α.β] Alguns itens particulares: Se α = ɛ, [Y.β] Se β = ɛ, [Y α.] Este item é designado de completo Se α = β = ɛ, [Y.]

16 Construção dum autómato com pilha a partir duma CFG Para construir o autómato com pilha correspondente introduzimos, se necessário, um novo símbolo inicial S e a regra S S. (Necessário se e a gramática não tiver esta configuração). O símbolo significa: marca de fim de buffer de entrada (ou ainda: fim de analise, fim de ficheiro etc...). Assim o buffer de entrada deverá considerar como último símbolo o símbolo. Por exemplo: Dada a gramática Conjunto dos itens: E ::= E + E E ::= E * E E ::= x Nova versão : S ::= E E ::= E + E E ::= E * E E ::= x S ::=. E E ::=. E + E E ::=. E E E ::=. x S ::= E. E ::= E. + E E ::= E. E E ::= x. S ::= E. E ::= E +. E E ::= E. E E ::= E + E. E ::= E E.

17 Construção dum autómato com pilha a partir duma CFG Tendo uma gramática G = (T, N, S, P), o autómato com pilha define-se então da seguinte forma: Alfabeto: T. Estados: Conjunto dos itens associado à gramática G. Transições: T {ɛ}. Estado inicial: S.S Significa: Preparada para iniciar o reconhecimento duma frase gerada por S Estado final (único): S S. Significa: Uma frase gerada por S foi reconhecido e a marca de fim de analise foi atingida. Transições: 3 tipos de transição Expansão. Para cada Y ::= α de P (lembrete: α (N T ) ). ɛ [X β. Y γ] [X β. Y γ][y. α] Leitura de a T. a [X β. aγ] [X βa. γ] Redução da regra Y ::= α. ɛ [X β. Y γ][y α. ] [X βy. γ]

18 Exemplo Reconhecimento de aabb pela gramática S ::= asb S ::= ɛ start [S. S ] expansão S ::= asb [S. S ][S. asb] leitura a [S. S ][S a. Sb] expansão S ::= asb [S. S ][S a. Sb][S. asb] leitura a [S. S ][S a. Sb][S a. Sb] expansão S ::= ɛ [S. S ][S a. Sb][S a. Sb][S.] redução [S. S ][S a. Sb][S as. b] leitura b [S. S ][S a. Sb][S asb.] redução [S. S ][S as. b] leitura b [S. S ][S asb.] redução [S S. ] leitura [S S. ]

19 Exercício Definir um reconhecimento de id + id id com base no autómato com pilha subjacente a gramática seguinte: E ::= T E + T T ::= F T F F ::= id (E)

20 A Situação Este processo consegue lidar com todas as gramática livres de contexto, mas os autómatos gerados por este métodos são enormes. e são igualmente não-deterministas. De facto, numa execução do autómato podemos: guardar o registo das transições expansão e construir uma derivação esquerda Ou, guardar o registo das transições redução e reconstruir uma derivação direita. Em termos algorítmicos, um reconhecimento sintáctico baseado neste processo é completo mas particularmente ineficiente. Que soluções? Visar um subconjunto das gramáticas livres de contexto representativo sobre o qual outros tipos de algoritmos de reconhecimento mais eficientes possam ser definidos: as gramáticas LL e LR.

21 Plano

22 A situação Problema: Tendo em conta o não determinismo do autómato com pilha, como escolher uma regra de expansão? Uma solução possível: Olhar para o buffer de entrada um ou mais caracteres a frente. Contexto: Tomemos por exemplo as produções Y ::= α 1 α 2... α n. Se cada α i começar de forma distinta dos outros α j (i j) então ao ler um caracter a sabemos imediatamente que regras escolher: a regra Y ::= α k com α k = a (a na primeira posição).

23 Um exemplo 1 S ::= A d S 3 A ::= a A b 2 S ::= b 4 A ::= c Vamos analisar a situação mais cuidadosamente. Imaginemos que estamos numa situação em que pretendemos derivar algo de S. Se a entrada começar por a ou c então a única hipótese é escolher a regra 1. Se a entrada começar por b então a única possibilidade é escolher a regra 2 Qualquer outra entrada não pode reconhecida por S. Relativamente a A. Se a entrada for a então podemos escolher a 3 ra regra. Se a entrada for c então podemos escolher a 4 ta regra. Qualquer outra entrada não pode reconhecida por A.

24 Um exemplo 1 S ::= A d S 2 S ::= b 3 A ::= a A b 4 A ::= c Esta gramática tem então a particularidade de permitir escolher de forma certa a produção para a derivação, e isto com base na antevisão de um só caracter na entrada. Ou seja, com tal gramática a analise sintáctica é facilitada: em cada situação sabemos exactamente o que fazer entre escolher leituras, expansões de determinadas regras ou reduções.

25 Um exemplo 1 S ::= A d S 3 A ::= a A b 2 S ::= b 4 A ::= c Um exemplo: derivação da palavra acbdb (a qual juntamos para representar o fim de entrada): Estado antevisão da entrada decisão e acção 0 [.S ] Início 1 [.S ] a expansão regra 1 2 [.S ][.A d S] a expansão regra 3 3 [.S ][.A d S][.a A b] a leitura a 4 [.S ][.A d S][a. A b] c expansão regra 4 5 [.S ][.A d S][a. A b][.c] c leitura c 6 [.S ][.A d S][a. A b][c.] b redução regra 4 7 [.S ][.A d S][aA. b] b leitura b 8 [.S ][.A d S][a A b.] d redução da regra 3 9 [.S ][A. d S] d leitura d 10 [.S ][A d. S] b expansão regra 2 11 [.S ][A d. S][.b] b leitura b 12 [.S ][A d. S][b.] redução da regra 2 13 [.S ][A d S.] redução da regra 1 14 [S. ] leitura 15 [S.] ɛ sucesso Esta analise corresponde a derivação esquerda seguinte: S = S = AdS = aabds = acbds = acbdb

26 Um exemplo E se juntarmos mais uma regra? 1 S ::= A d S 2 S ::= b 3 A ::= a A b 4 A ::= c 5 A ::= ɛ O facto de A poder derivar o ɛ obriga aqui a um cuidado especial: temos de olhar para além de A para saber que regra escolher: Relativamente a S. Se a entrada começar por a, c ou d então a única hipótese é escolher a regra 1. Se a entrada começar por b então a única possibilidade é escolher a regra 2 Qualquer outra entrada não pode reconhecida por S. Relativamente a A. Se a entrada for a então podemos escolher a 3 ra regra. Se a entrada for c então podemos escolher a 4 ta regra. Se a entrada for b ou d então podemos escolher a 5 ta regra.

27 Exemplo: Conclusão por tirar Para poder ter uma analise sintáctica nestes moldes é preciso conseguir determinar para toda a palavra m de (N T ) (em particular não-terminais) se esta pode derivar a palavra vazia, que conjunto de caracteres (letras de T ) apareçam em primeira posição das palavras geradas por m e finalmente que conjunto de caracteres terminais apareçam em primeira posição a seguir a qualquer palavra gerada por m. Estes dados permitirão construir um analisador (descendente) eficiente e determinístico.

28 Como funciona a análise descendente geral Tendo uma tabela de transição Tr que, por cada não terminal Y e para cada palavra m por reconhecer devolve, se possível, o lado direito (rhs) duma produção aplicável Tr(Y, m) que permite um passo no reconhecimento de m. Construímos então o autómato com pilha da forma seguinte pilha: uma palavra p de (N T ). Enquanto este não for olhamos para o tipo da pilha. No estado inicial p = S Se o terminal a estiver no topo da pilha então efectuamos a transição a a ɛ. Ou seja a leitura de a (a é assim consumido e retirado da pilha). Se o topo da pilha for um não-terminal X então procuramos uma produção X ::= β tal que Tr(X, m) = β e então efectuamos a transição X ɛ β e colocamos todos os caracteres de β na pilha de tal forma que o primeiro caracter de β fique no topo da pilha.

29 Analise do método geral Em termos teóricos: a automatização deste processo obriga a exploração de toda a entrada por analisar. Ou seja a escolha da transição depende da palavra analisada. O conjunto das palavras por analisar é virtualmente infinito. Em termos práticos: muito dispendioso em termos de recurso Solução: limitar o tamanho da palavra na tabela de transição. Basta limita-las a um comprimento de dois ou até de um. por exemplo no exemplo anterior, um só caracter de antevisão era suficiente para determinar por completo a escolha das transições em qualquer situação. As gramáticas LL(k) que vamos explorar permitam construir tabelas de transição que só consideram a antevisão de k caracteres da entrada para permitir uma decisão. LL(k) = Left-to-right parse, Leftmost-derivation k-symbol lookahead.

30 Analizadores LL(k) imaginemos que temos a função rhs que aceite em parâmetro um não-terminal e uma palavra e que devolva a parte direita da regra de produção por aplicar. Esta função é o elemento chave do procedimento que vamos passar a descrever. Baseia-se integralmente na existência da tabela de transição Tr. Assumimos aqui a sua existência. Neste contexto é relativamente simples escrever um analisador sintáctico sem ter de utilizar o autómato de pilhas associado a gramática. Ideia de base: definir para cada não terminal X uma função f X que aceite em entrada a string m por analisar e devolve a palavra m tal que existe uma palavra p tal que m = pm X = p. De facto tal função f X consome a parte da palavra m que consegue ser reconhecida por X (ou seja uma sub-palavra de m que é derivável/reconhecida por X ) Todas as funções f X utilizam a função auxiliar recognize que dados uma palavra β de (N T ) e uma entrada m devolve a palavra m tal que m = pm β = p

31 Implementação função f X (m) = seja β = rhs(x, m) em recognize(β, m) função recognize(β, m) = se β = ɛ então m senão seja a = head(β) β = tail(β) em se a T então se a = head(m) então recognize(β, tail(m)) senão erro senão ( a N ) seja m = f a(m) em recognize(β, m )

32 Implementação Veremos a seguir como construir uma tabela de transição sobre a qual a implementação da função rhs se apoia trivialmente. A análise de m é bem sucedida se f S (m) devolve a palavra vazia (ou se o inserimos na entrada como símbolo de fim de entrada).

33 Gestão dos erros Como as gramáticas que aqui consideramos são reduzidas, um erro é detectado no local exacto onde este ocorre. Seja m 1 a palavra lida com sucesso até ao momento do erro. então existe um m 2 tal que m 1m 2 seja reconhecida pela gramática. Este m 2 existe necessariamente, visto a gramática ser produtiva. Aproveitando este facto um gestor de erros pode consumir m2 até encontrar um caracter espacial (como ; end etc.) e permitir que a analise volte a decorrer normalmente a partir daí. assim 1 fase de compilação = vários erros detectados.

34 Conceito Nas analises descendentes procuramos métodos eficientes de procura de derivações do símbolo inicial até a palavra analisada (arvore de derivação construída da raíz para as folhas). Aqui pretendemos definir um método eficiente de construção da função rhs ou seja da tabela de transição Tr. O critério de eficiência leva nos a limitar o campo de antevisão inerente a tabela de transição. O nosso focus aqui: LL(1) = um caracter de antevisão. Quando X ::= β é candidata para uma expansão (como transição a aplicar na derivação) temos a situação seguinte: o caracter de entrada tem de ser o primeiro caracter derivável de X ou o primeiro caracter que segue X (se X deriva ɛ).

35 Null, Prim, Seg: Definição Null : (N T ) Bool { true if α = ɛ α false otherwise Ou seja, Null(α) é verdade se α pode derivar a palavra vazia. Prim : (N T ) P(T ) α {a T m T.α = am} Ou seja, Prim(α) devolve o conjunto dos caracteres (terminais) que podem ocorrer na primeira posição das palavras derivadas a partir de α. Temos igualmente Prim(ɛ) = Seg : N P(T ) X γ (N T ), β.s = βx γ Prim(γ). Ou seja, Seg(X ) devolve o conjunto das letras (terminais) que podem seguir imediatamente qualquer palavra derivada de X.

36 Null, Prim, Seg Estas definições permitam calcular a tabela de transição, logo a função rhs e assim completar a escrita dum analisador descendente (aqui LL(1)). Mas para de tal é preciso determinar algoritmicamente os conjuntos subjacentes a estas três definições. Vamos ver que se calculam como pontos fixos. Princípio da técnica de procura de ponto fixo: Proceder por etapas. Cada etapa recebe o resultado da etapa anterior (excepto a primeira). Assim o objectivo de cada etapa é refinar este resultado e fornecê-la a etapa seguinte. É assim preciso fornecer um valor inicial ao processo: a etapa 0. Visto deste modo o resultado pretendido é gradualmente obtido e o processo para quando a sucessão de etapa não produz mais nenhuma novidade. Dizemos que este resultado é o ponto fixo do processo de procura que termina assim neste ponto.

37 Null Qualquer que seja a palavra α, se α contém um terminal então necessariamente Null(α) = false. Logo as únicas palavras de (N T ) que podem potencialmente derivar ɛ são palavras de N. Assim, o primeiro passo é determinar que não-terminais (elementos de de N) derivam a palavra vazia. Genericamente, a ideia subjacente é: X ( N) deriva a palavra vazia ɛ se e só se existe uma produção X ::= ɛ ou X ::= X 1X 2... X n tal que X 1... X n derivam todos eles a palavra vazia. Vamos de seguida precisar esta ideia e definir um conjunto de equações para os não-terminais de N.

38 Null Para um não-terminal X de N, sejam β 1... β n o conjunto de todas as palavras de (N T ) tais que X ::= β i, (1 i n) seja uma produção. Então Null(X ) = Null(β 1) Null(β 2)... Null(β n). Vamos agora debruçar-nos sobre o valor individual dos Null(β i ): Caso β i = ɛ. Null(ɛ) = true Caso β i = X 1 X 2... X n. Null(X 1 X 2... X n ) = Null(X 1 )... Null(X n ). Caso β i ((N T ) N ). Null(β i ) = false

39 Null Como as produções (logo, as equações) podem ser recursivas temos de proceder por iteração. Vamos construir uma tabela T NULL onde as linhas são os não-terminais da gramática e as colunas as iterações do algoritmo. Assim, T NULL (X, i) representa o valor de Null(X ) na etapa i do processo de cálculo. Para começar, determinar para cada não terminal X a equação Null que lhe corresponde.

40 Null O processo de procura de ponto fixo define-se da seguinte forma: Etapa 0. Todos os não-terminais são marcados como não gerando ɛ (ou seja X N, T NULL (X, 0) = false) Etapa i + 1. Verificamos se existem não-terminais X com produção X ::= ɛ que ainda não foram marcadas como gerando ɛ na etapa i anterior. Neste caso T NULL (X, i + 1) = true. Se existir regras da forma X ::= X 1X 2... X n tais que X 1... X n são marcados como derivando ɛ na etapa i, ou seja j N, 1 j n, T NULL (X j, i) = true, então marcamos X como derivando a palavra vazia T NULL (X, i + 1) = true. Este processo acaba quando encontramos um ponto fixo, ou seja quando pela primeira vez repetimos uma coluna. O valor desta coluna (que é o ponto fixo procurado) representa o valor final de Null.

41 Exemplo 1 E ::= T E 2 E ::= + T E 3 E ::= ɛ 4 T ::= F T 5 T ::= F T 6 T ::= ɛ 7 F ::= id 8 F ::= ( E ) As regras 2, 5, 7 e 8 nunca vão gerar a palavra vazia. As regras 3 e 6 derivam explicitamente a palavra vazia As regras 1 e 4 derivam potencialmente a palavra vazia. Mas veremos já com a tabela T NULL que nunca derivarão ɛ devido ao facto de F e de T não derivarem ɛ.

42 Exemplo 1 E ::= T E 2 E ::= + T E 3 E ::= ɛ 4 T ::= F T 5 T ::= F T 6 T ::= ɛ 7 F ::= id 8 F ::= ( E ) Null(E) = Null(T E ) = Null(T) Null(E ) Null(E ) = Null(+ T E ) Null(ɛ) = false true = true Null(T ) = Null(F T ) = Null(F) Null(T ) Null(T ) = Null( F T ) Null(ɛ) = false true = true Null(F ) = Null(id) Null( ( E ) ) = false false = false

43 Exemplo 1 E ::= T E 2 E ::= + T E 3 E ::= ɛ 4 T ::= F T 5 T ::= F T 6 T ::= ɛ 7 F ::= id 8 F ::= ( E ) Como funciona o processo iterativo? Por exemplo: calcular Null(E) = Null(T ) Null(E ) na etapa i + 1 Olhar para os valores de Null(T ) e de Null(E ) na etapa i, digamos a e b. Então na etapa i + 1, Null(E) = a b

44 Exemplo 1 E ::= T E 2 E ::= + T E 3 E ::= ɛ 4 T ::= F T 5 T ::= F T 6 T ::= ɛ 7 F ::= id 8 F ::= ( E ) T NULL E false Null(T ) Null(E ) = false false E false true true T false Null(F ) Null(T ) = false false T false true true F false false false FIM

45 Exemplo 1 S ::= A B C 2 S ::= d S 3 A ::= B C 4 A ::= a A 5 B ::= C 6 B ::= b B 7 C ::= ɛ 8 C ::= c C Legenda: true = false = T NULL S A B C FIM Na etapa 1 C é marcado como verdade com base no passo 1 (devido a produção 7). Na etapa 2, B é marcado como true com base no passo 2 (devido a produção 5). Na etapa 3, A é marcado como true com base no passo 2 (devido a produção 3). etc...

46 Prim Seja α uma palavra de (N T ). Então α tem a forma seguinte α = m 1X 1m 2X 2... m nx nm n+1 (os m i s são palavras de T e os X j não-terminais) O calculo de Prim(α) baseia-se sobre a natureza de m 1. 1 se m 1 ɛ então Prim(m 1 X 1... X n m n+1 ) = {a} onde a é o primeiro caracter de m 1. 2 se m 1 = ɛ então Prim(m 1 X 1... X n m n+1 ) = Prim(X 1... X n m n+1 ). 1 se Null(X 1) = true então Prim(X 1... X nm n+1) = Prim(X 1) Prim(m 2X 3... X nm n+1) 2 senão (Null(X 1) = false) Prim(X 1... X nm n+1) = Prim(X 1) Para os não-terminais: para todo o X N, Prim(X ) = X ::=γ Prim(γ) Prim(ɛ) =

47 Prim Para calcular o conjunto Prim vamos igualmente proceder por iteração sobre uma tabela até encontrar um ponto fixo. Determinar para cada não terminal X a equação Prim que lhe corresponde. O processo vai construir uma tabela T PRIM em que as linhas são não terminais e as colunas as etapas do processo. Aplicar o algoritmo de procura de ponto fixo seguinte: Etapa 0. Todos os não terminais tem como conjunto de primeiros caracteres o conjunto vazio. Etapa i + 1: Actualizamos os conjuntos com base nas equações e os conjuntos obtidos na etapa i anterior.

48 Exemplo 1 E ::= T E 2 E ::= + T E 3 E ::= ɛ 4 T ::= F T 5 T ::= F T 6 T ::= ɛ 7 F ::= id 8 F ::= ( E ) Prim(E) = Prim(T E ) = Prim(T), (porque Null(T ) = false) Prim(E ) = Prim(+ T E ) Prim(ɛ) = {+} Prim(T ) = Prim(F T ) = Prim(F), (porque Null(F ) = false) Prim(T ) = Prim( F T ) Prim(ɛ) = { } Prim(F ) = Prim(id) Prim( ( E ) ) = {id, (}

49 Exemplo 1 E ::= T E 2 E ::= + T E 3 E ::= ɛ 4 T ::= F T 5 T ::= F T 6 T ::= ɛ 7 F ::= id 8 F ::= ( E ) T PRIM E Prim(T ) = Prim(T ) = Prim(T ) = {id, (} Prim(T ) = {id, (} E {+} {+} {+} {+} T Prim(F ) = Prim(F ) = {id, (} Prim(F ) = {id, (} Prim(F ) = {id, (} T { } { } { } { } F {id, (} {id, (} {id, (} {id, (} FIM

50 Seg Para o calculo de Seg(X ), X N, vamos ter em conta o símbolo terminal que fará sempre parte do conjunto Seg do símbolo inicial S (ou seja Seg(S)). Temos: Seg(X ) = ( Y ::=αx β (Prim(β))) ( Y ::=αx β Null(β) Seg(Y )) O primeiro passo da procura dos conjuntos Seg é estabelecer para cada não-terminal a equação a qual o seu conjunto Seg obedece. Mais uma vez vamos proceder por iteração sobre uma tabela T SEG até chegar a um ponto fixo. Etapa 0: todos os símbolos de N tem por conjunto Seg o conjunto vazio excepto o símbolo inicial S. Seg(S) = { } Etapa i + 1: Actualizamos os diferentes conjuntos Seg de acordo com os conjuntos calculados na etapa i.

51 Exemplo 1 E ::= T E 2 E ::= + T E 3 E ::= ɛ 4 T ::= F T 5 T ::= F T 6 T ::= ɛ 7 F ::= id 8 F ::= ( E ) Seg(E) = { } Prim( ) ) = {, )} Seg(E ) = (Prim(ɛ) Prim(ɛ)) Seg(E) Seg(E ) = Seg(E) Seg(E ) Seg(T ) = Prim(E ) Seg(E) Seg(E ) = {+} Seg(E) Seg(E ) Seg(T ) = (Prim(ɛ) Prim(ɛ)) Seg(T ) Seg(T ) = Seg(T) Seg(T ) Seg(F ) = Prim(T ) Prim(T ) Seg(T ) seg(t ) = { } Seg(T) seg(t )

52 Exemplo 1 E ::= T E 2 E ::= + T E 3 E ::= ɛ 4 T ::= F T 5 T ::= F T 6 T ::= ɛ 7 F ::= id 8 F ::= ( E ) T SEG E { } {, ) } {, ) } {, ) } {, ) } E Seg(E) Seg(E ) = { } {, ) } {, ) } {, ) } T {+} Seg(E) Seg(E ) = {, +} {, ), +} {, ), +} {, ), +} T Seg(T ) Seg(T ) = {, +} {, ), +} {, ), +} F { } Seg(T ) seg(t ) = { } {, +, } {, ), +, } {, ), +, } FIM

53 Exercício Calcular os conjuntos Prim e Seg para a gramática seguinte: 1 S ::= A B C 2 S ::= d S 3 A ::= B C 4 A ::= a A 5 B ::= C 6 B ::= b B 7 C ::= ɛ 8 C ::= c C

54 Construção da Tabela de Transição As construções que vimos até agora tinham como objectivo permitir a construção da tabela de transição. De facto, tendo a tabela de transição Tr a implementação de analisadores sintácticos descendentes é fácil. Pretendemos construir uma tabela Tr : N T k (no caso dos analisadores LL(1) que aqui descrevemos, k = 1) tal que Tr(A, a 1a 2... a k ) nos indique que expansão efectuar (que produção escolher) tendo em conta o não-terminal A e os k primeiros caracteres da entrada.

55 Construção da Tabela de Transição Consideremos aqui o caso k = 1. Vamos proceder assim: Para cada regra de produção A ::= α 1 Para cada terminal a de Prim(α) acrescentamos α em Tr(A, a) 2 Se Null(α) então acrescentamos α em todas as células Tr(A, b) tais que (b T b = ) b Seg(A) Qualquer célula que ficar vazia indica uma situação de erro. A função rhs tem então uma definição trivial: sejam x um não-terminal e m k os k primeiros caracteres duma palavra m, rhs(x, m) = Tr(X, m k )

56 Gramática LL(1) Uma gramática é LL(1) quando só existe no máximo uma entrada em qualquer célula de Tr com base na tabela de transição e nas funções f X (X N), recognize e rhs, o analisador lê a palavra de entrada da esquerda para a direita e constrói uma árvore de derivação sustentada por uma derivação esquerda.

57 Exemplo id ( ) + E T E T E E ɛ + T E ɛ T F T F T T ɛ ɛ F T ɛ F id ( E )

58 Exercício Construir a tabela de transição para a gramática: 1 S ::= A B C 2 S ::= d S 3 A ::= B C 4 A ::= a A 5 B ::= C 6 B ::= b B 7 C ::= ɛ 8 C ::= c C

59 Exemplo de gramática que não é LL(1) S ::= d Y ::= ɛ X ::= Y S ::= X Y S Y ::= c X ::= a Null Prim Seg X a c a c d Y c a c d S a c d a c d S XYS XYS (XYS) (d) X (a) (Y ) Y Y Y ɛ (ɛ) (c) ɛ

60 Como caracterizar gramáticas LL(1) Já sabemos que são gramáticas que permitam uma analise descendente eficiente e simples Sabemos igualmente LL(1) uma entrada no máximo em cada célula da tabela de transição mas não haverá uma forma informal ou intuitiva de caracterizar tais gramáticas? Sim: É possível prever, sempre, que regra escolher só com base nos k primeiros caracteres. Ou seja, para k = 1 e um não-terminal A tal que A ::= α 1 α 2... α n e para i e j distintos : 1 no máximo um dos α i é tal que Null(α i ) = true 2 Prim(α i ) Prim(α j ) = 3 i.null(α i ) = j.prim(α j ) Seg(A) =

61 Exemplo completo T ::= F T E ::= T E F ::= id T ::= F T F ::= num E ::= +T E T ::= /FT F ::= ( E ) E ::= T E T ::= ɛ E ::= ɛ Null Prim Seg E ( id num ) E + ) T ( id num ) + T / ) + F ( id num ) + / + / id num ( ) E TE TE TE E +TE TE ɛ ɛ T FT FT FT T ɛ ɛ FT /FT ɛ ɛ F id num ( E )

62 Plano Eliminar a Recursividade Esquerda Factorizar a Esquerda Eliminar a Recursividade Esquerda Factorizar a Esquerda

63 Eliminar a Recursividade Esquerda Factorizar a Esquerda Transformar Gramáticas CFG em Gramáticas LL(1) Já sabemos: nem todas as gramáticas CFG são LL(1). Será possível obter uma gramática LL(1) a partir duma gramática CFG? Nem sempre, mas possível em geral. Existam situações standard que são sintomas de gramáticas não-ll(1): recursividade esquerda e falta de factorização esquerda. Veremos algoritmos que permitam a resolução de tais situações. Suficiente? Em geral, não. Completar a transformação da gramática consoante diagnósticos feitas às anomalias presentes na tabela de transição (soluções Ad-Hoc). Por exemplo a redução da gramatica por remoção de não-terminais.

64 O que é a Recursividade Esquerda? Eliminar a Recursividade Esquerda Factorizar a Esquerda Uma gramática é recursiva esquerda se existir uma derivação tal X = + X α Uma gramática recursiva esquerda não pode ser LL(1) Se pretendemos obter uma gramática LL(1) então é preciso eliminar a recursividade esquerda.

65 Eliminar a Recursividade Esquerda Factorizar a Esquerda Remover a recursividade esquerda directa Situação: A ::= A α 1 A α 2 A α n A ::= β 1 β 2 β m Os β i não começam por A transformar em A ::= β 1 A β 2 A β m A A ::= α 1 A α 2 A α n A A ::= ɛ Caso particular: caso surge regras do tipo A ::= A, estas regras podem ser removidas.

66 Eliminar a Recursividade Esquerda Factorizar a Esquerda Remoção da Recursividade Esquerda Indirecta Consideremos esta gramática: S + = S d a S ::= A a S ::= b A ::= A c A ::= S d Como proceder para remover esta recursividade esquerda?

67 Eliminar a Recursividade Esquerda Factorizar a Esquerda Remoção da Recursividade Esquerda Indirecta Organizar os não-terminais de 1 a n (no caso de N = n): A 1, A 2,..., A n. Mas: ordem escolhida tem a sua importância! Preferir atribuir os índices menores aos não-terminais do fundo da gramática e o índice final ao símbolo inicial. Processo em n etapas: etapa 1: Eliminar a recursividade directa de A 1 etapa i: enquanto existir uma produção A i ::= A j α (com i > j) olhar para todas as produções tais que A j ::= β e substituir A i ::= A j α por A i ::= βα retirar então a recursividade esquerda directa (quando i = j). No final, se β começa por um A k então necessariamente k > i. O processo iterativo anterior só acaba quando temos produções A i ::= A j α tal que i < j

68 Exemplo Eliminar a Recursividade Esquerda Factorizar a Esquerda Ordem: S, A (contrária a sugestão feita...) S ::= A a S ::= b A ::= A c A ::= S d Comecemos por S: S ::= A a S ::= b Para A substituímos A a e b em A ::= S d, logo: A ::= A c A ::= A a d A ::= b d Podemos então eliminar a recursividade esquerda directa: A ::= b d A A ::= a d A A ::= c A A ::= ɛ

69 Factorizações a Esquerda Eliminar a Recursividade Esquerda Factorizar a Esquerda Conflito por prefixo comum A ::= αβ 1 A ::= αβ 2. A ::= αβ n Neste caso transformar tais regras em: A ::= αa A ::= β 1 A ::= β 2. A ::= β n Remoção prévia de Não-Terminais Pode acontecer que duas produções dum não terminal Y tenham conjuntos Prim não disjuntos sem no entanto apresentarem explicitamente prefixo comum. Pode assim ser interessante tentar explicitar estes prefixos e proceder a transformação anterior. Y ::= βx γ (X Y ) Neste caso substituir tal regra pelas regras: Y ::= βαγ para todo α tal que (X ::= α) P. Proceder então à factorização esquerda caso necessário.

70 Exercício Eliminar a Recursividade Esquerda Factorizar a Esquerda Transforme a gramática seguinte numa gramática LL(1): 1 S ::= A B C 2 S ::= d S 3 A ::= B C 4 A ::= a A 5 B ::= C 6 B ::= b B 7 C ::= ɛ 8 C ::= c C

71 Eliminar a Recursividade Esquerda Factorizar a Esquerda Considerações finais sobre Gramáticas LL(1) (+) Analisadores simples de escrever (-) As gramáticas LL(1) não são naturais (distantes das gramáticas de papel e caneta ) (-) Nem todas as gramáticas livres de contexto se traduzem facilmente em gramáticas LL(1). Em alguns casos é mesmo impossível. Por exemplo: S ::= A A ::= a A b B ::= a B b b S ::= B A ::= 0 B ::= 1 As tabelas de transição para as gramáticas LL(k) com k 1 crescem muito rapidamente e tornam estas analises pesadas.

72 Análise sintactica LL(1) em Ocaml Eliminar a Recursividade Esquerda Factorizar a Esquerda Leitura e manipulaç~ao de express~oes lógicas simples com streams Este método de leitura implementa um lexer/parser descendente para a gramática LL(1) das express~oes lógicas seguinte (N -> {TRUE, FALSE}, V -> Variáveis): E ::= T E E ::= -> T E E ::= <-> T E E ::= \epsilon T ::= F T T ::= & F T T ::= F T T ::= \epsilon F ::= N F ::= V F ::=! E F ::= ( E )

73 Análise sintactica LL(1) em Ocaml Eliminar a Recursividade Esquerda Factorizar a Esquerda let lexer = make_lexer ["("; ")"; "<->"; "->"; " "; "&" ; "!"; "TRUE"; "FALSE"] (*val parse_expr : Genlex.token stream -> unit *) let rec parse_expr = parser (* corresponde a entrada E da gramatica *) [< parse_conj; parse_more_imps >] -> () and parse_more_imps = parser (* corresponde a entrada E da gramatica *) [< Kwd "->"; parse_conj; parse_more_imps >] -> () [< Kwd "<->"; parse_conj;parse_more_imps >] -> () [< >] -> () and parse_conj = parser (* corresponde a entrada T da gramatica *) [< parse_simple; parse_more_conjs >] -> () and parse_more_conjs = parser (* corresponde a entrada T da gramatica *) [< Kwd "&"; parse_simple; parse_more_conjs >] -> () [< Kwd " "; parse_simple; parse_more_conjs >] -> () [< >] -> () and parse_simple = parser (* corresponde a entrada F da gramatica *) [< Ident s >] -> () [< Kwd "TRUE" >] -> () [< Kwd "FALSE" >] -> () [< Kwd "!"; parse_expr >] -> () [< Kwd "("; parse_expr; Kwd ")" >] -> () let parse_expression = parser [< parse_expr; _ = Stream.empty >] -> ()

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

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

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

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 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

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

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

Compiladores. Parser LL 10/13/2008

Compiladores. Parser LL 10/13/2008 Compiladores Fabiano Baldo Usa uma pilha explícita ao invés de chamadas recursivas para realizar a análise sintática. LL(k) parsing significa que ktokensà frente são utilizados. O primeiro L significa

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

IV Gramáticas Livres de Contexto

IV Gramáticas Livres de Contexto IV Gramáticas Livres de Contexto Introdução Definições de GLC 1 G = (Vn, Vt, P, S) onde P = {A α A Vn α (Vn Vt) + } 2 GLC ε - LIVRE : S ε pode pertencer a P, desde que: S seja o símbolo inicial de G S

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

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 Aula 6. Celso Olivete Júnior.

Compiladores Aula 6. Celso Olivete Júnior. Aula 6 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada Analisadores Sintáticos Descendentes ASD com retrocesso ASD preditivo recursivo não-recursivo 2 ASD Preditivo Recursivo Projeto Parte 2

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

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

Construção de Compiladores Aula 16 - Análise Sintática Construção de Compiladores Aula 16 - Análise Sintática Bruno Müller Junior Departamento de Informática UFPR 25 de Setembro de 2014 1 Introdução Hierarquia de Chomsky Reconhecedores Linguagens Livres de

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

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

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

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

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

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

LINGUAGENS FORMAIS E AUTÔMATOS

LINGUAGENS FORMAIS E AUTÔMATOS LINGUAGENS FORMAIS E AUTÔMATOS O objetivo deste curso é formalizar a idéia de linguagem e definir os tipos de sintaxe e semântica. Para cada sintaxe, analisamos autômatos, ue são abstrações de algoritmos.

Leia mais

Marcos Castilho. DInf/UFPR. 21 de março de 2019

Marcos Castilho. DInf/UFPR. 21 de março de 2019 21 de março de 2019 Análise sintática: introdução Dada uma gramática G e uma palavra w Σ, como saber se w L(G)? Isto é, como saber se S = G w? Derivações à esquerda e ambiguidade w L(G) se S = G w; Sabemos

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

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

Análise Sintática LL(1)

Análise Sintática LL(1) FACULDADE ANGLO AMERICANO FOZ DO IGUAÇU Curso de Ciência da Computação 7º Periodo Disciplina: Compiladores Prof. Erinaldo Sanches Nascimento Análise Sintática LL(1) Análise Sintática Descendente Introduçã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

Linguagens Formais e Autômatos P. Blauth Menezes

Linguagens Formais e Autômatos P. Blauth Menezes Linguagens Formais e Autômatos P. Blauth Menezes blauth@inf.ufrgs.br Departamento de Informática Teórica Instituto de Informática / UFRGS Linguagens Formais e Autômatos - P. Blauth Menezes 1 Linguagens

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

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

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 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

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. 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

Construção de Compiladores Aula 17 - Análise Sintática Descendente

Construção de Compiladores Aula 17 - Análise Sintática Descendente Construção de Compiladores Aula 17 - Análise Sintática Descendente Bruno Müller Junior Departamento de Informática UFPR 3 de Novembro de 2014 1 Análise Sintática Descendente Eliminação de retrocessos Converter

Leia mais

Teoria da Computação Frequência. Universidade da Beira Interior

Teoria da Computação Frequência. Universidade da Beira Interior Teoria da Computação Frequência Duração: 2 horas Universidade da Beira Interior Quinta-Feira 10 de Janeiro de 2008 É proibido o uso de calculadora e de telemóvel. Qualquer fraude implica reprovação na

Leia mais

Teoria da Computação

Teoria da Computação Teoria da Computação Introdução às Linguagens Formais e as suas Gramáticas Simão Melo de Sousa Computer Science Department University of Beira Interior, Portugal Plano 1 Introduction a Teoria das Linguagens

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

Draft-v Gramáticas Independentes do Contexto O funcionamento de uma CFG Derivação de uma palavra

Draft-v Gramáticas Independentes do Contexto O funcionamento de uma CFG Derivação de uma palavra Gramáticas Independentes do Contexto Como vimos nos capítulos anteriores, apesar da classe das Linguagens Regulares serem particularmente bem comportadas tanto em termos de complexidade dos seus algoritmos

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

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

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

Draft-v0.2. Gramáticas Independentes do Contexto O funcionamento de uma CFG Derivação de uma palavra

Draft-v0.2. Gramáticas Independentes do Contexto O funcionamento de uma CFG Derivação de uma palavra 10 Gramáticas Independentes do Contexto Como vimos nos capítulos anteriores, apesar da classe das Linguagens Regulares serem particularmente bem comportadas tanto em termos de complexidade dos seus algoritmos

Leia mais

A. (Autómatos finitos determinísticos e não determinísticos AFD e AFND)

A. (Autómatos finitos determinísticos e não determinísticos AFD e AFND) DEP. INFORMÁTICA - UNIVERSIDADE DA BEIRA INTERIOR Teoria da Computação Eng. Informática 1º Semestre Exame 1ª chamada - Resolução 2h + 30min 31/Jan/2011 Pergunta A.1 A.2 A.3 B.1 B.2 B.3a B.3b C.1 C.2 D.1

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

Teoria da Computação Aula - Linguagens e Gramáticas Formais

Teoria da Computação Aula - Linguagens e Gramáticas Formais Teoria da Computação Aula - Linguagens e Gramáticas Formais Simão Melo de Sousa SMDS TC 1 Introduction a Teoria das Linguagens Formais prelúdio SMDS TC 2 Aviso Prévio A redacção dos apontamentos da disciplina

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

LINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO

LINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO LINGUAGEM LIVRE DE CONTEXTO As Linguagens Livres de Contexto é um reconhecedor de linguagens, capaz de aceitar palavras corretas (cadeia, sentenças) da linguagem. Por exemplo, os autômatos. Um gerador

Leia mais

Draft-v0.1. Máquinas de Turing Máquinas de Turing

Draft-v0.1. Máquinas de Turing Máquinas de Turing 13 Máquinas de Turing A necessidade de formalizar os processos algorítmicos levou, nas décadas 20 e 30 do século XX, a diversos estudos, entre os quais os de Post, Church e Turing, com vista a estudo formal

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

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

Parsing Preditivo. Antes de ser abordado o Parsing Preditivo, será apresentado o Analisador Sintático Descendente Recursivo.

Parsing Preditivo. Antes de ser abordado o Parsing Preditivo, será apresentado o Analisador Sintático Descendente Recursivo. UPE Caruaru Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Parsing Preditivo Antes de ser abordado o Parsing Preditivo, será apresentado o Analisador Sintático Descendente Recursivo.

Leia mais

Aula de 28/10/2013. sticas; Implementação. em Ruby

Aula de 28/10/2013. sticas; Implementação. em Ruby Linguagens Formais e Autômatos (LFA) Aula de 28/10/2013 Propriedades Formais Relevantes das LLC s; Lema do Bombeamento; Linguagens LL e LR; Gramáticas LC Determinísticas sticas; Implementação em Ruby 1

Leia mais

Linguagens Livres de Contexto

Linguagens Livres de Contexto Universidade Católica de Pelotas Centro Politécnico Bacharelado em Ciência da Computação 364018 Linguagens Formais e Autômatos TEXTO 4 Linguagens Livres de Contexto Prof. Luiz A M Palazzo Maio de 2011

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

COMPILADORES. Revisão Linguagens formais Parte 02. Prof. Geovane Griesang

COMPILADORES. Revisão Linguagens formais Parte 02. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Revisão Linguagens formais Parte 02 Prof. geovanegriesang@unisc.br Legenda: = sigma (somatório) = delta ε = epsilon λ =

Leia mais

Formas normais. Forma normal de Greibach (FNG) todas as produções são da forma

Formas normais. Forma normal de Greibach (FNG) todas as produções são da forma Formas normais Em muitas aplicações, é útil que as GIC tenham regras de tipos especiais. Para tal é necessário que se possa transformar qualquer gramática numa equivalente (isto é que gere a mesma linguagem)

Leia mais

Gramáticas e Linguagens Independentes de Contexto

Gramáticas e Linguagens Independentes de Contexto Gramáticas e Linguagens Independentes de Contexto 6.1 Responde às uestões seguintes considerando a gramática independente de contexto G = (V, {a, b}, P, R), onde o conjunto de regras P é: R XRX S S at

Leia mais

Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof. Jefferson Morais

Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof. Jefferson Morais UNIVERSIDADE FEDERAL DO PARÁ INSTITUTO DE CIÊNCIAS EXATAS E NATURAIS FACULDADE DE COMPUTAÇÃO CURSO DE BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof.

Leia mais

Teoria da Computação

Teoria da Computação Teoria da Computação Autómatos finitos Simão Melo de Sousa Computer Science Department University of Beira Interior, Portugal Plano Introdução à noção de autómatos 1 Introdução à noção de autómatos Contexto

Leia mais

Capítulo 9: Linguagens sensíveis ao contexto e autômatos linearmente limitados.

Capítulo 9: Linguagens sensíveis ao contexto e autômatos linearmente limitados. Capítulo 9: Linguagens sensíveis ao contexto e autômatos linearmente limitados. José Lucas Rangel 9.1 - Introdução. Como já vimos anteriormente, a classe das linguagens sensíveis ao contexto (lsc) é uma

Leia mais

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO 2. Linguagens Livres-do-Contexto Referência: SIPSER, M. Introdução à Teoria da Computação. 2ª edição, Ed. Thomson Prof. Marcelo S. Lauretto marcelolauretto@usp.br

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

Gramáticas Livres de Contexto Parte 1

Gramáticas Livres de Contexto Parte 1 Universidade Estadual de Feira de Santana Engenharia de Computação Gramáticas Livres de Contexto Parte 1 EXA 817 Compiladores Prof. Matheus Giovanni Pires O papel do Analisador Sintático É responsável

Leia mais

Modelos de Computação Folha de trabalho n. 10

Modelos de Computação Folha de trabalho n. 10 Modelos de Computação Folha de trabalho n. 10 Nota: Os exercícios obrigatórios marcados de A a D constituem os problemas que devem ser resolvidos individualmente. A resolução em papel deverá ser depositada

Leia mais

Gramáticas Livres de Contexto

Gramáticas Livres de Contexto Gramáticas Livres de Contexto IBM1088 Linguagens Formais e Teoria da Computação Evandro Eduardo Seron Ruiz evandro@usp.br Universidade de São Paulo E.E.S. Ruiz (USP) LFA 1 / 42 Frase do dia Quando vires

Leia mais

Trabalho de Linguagens Formais e Compilação

Trabalho de Linguagens Formais e Compilação Trabalho de Linguagens Formais e Compilação Desenho de uma linguagem simples e do seu compilador para MIPS. (cod. 5387) Departamento de Informática Universidade da Beira Interior Ano lectivo 2012/2013

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

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

TRANSFORMAÇÃO DE GRAMÁTICAS LIVRES DO CONTEXTO PARA EXPRESSÕES REGULARES ESTENDIDAS

TRANSFORMAÇÃO DE GRAMÁTICAS LIVRES DO CONTEXTO PARA EXPRESSÕES REGULARES ESTENDIDAS TRANSFORMAÇÃO DE GRAMÁTICAS LIVRES DO CONTEXTO PARA EXPRESSÕES REGULARES ESTENDIDAS Acadêmico: Cleison Vander Ambrosi Orientador: José Roque Voltolini da Silva Roteiro da Apresentação Introdução Motivação

Leia mais

Gramática regular. IBM1088 Linguagens Formais e Teoria da Computação. Evandro Eduardo Seron Ruiz Universidade de São Paulo

Gramática regular. IBM1088 Linguagens Formais e Teoria da Computação. Evandro Eduardo Seron Ruiz Universidade de São Paulo Gramática regular IBM1088 Linguagens Formais e Teoria da Computação Evandro Eduardo Seron Ruiz evandro@usp.br Universidade de São Paulo E.E.S. Ruiz (USP) LFA 1 / 41 Frase do dia Através de três métodos

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

Álgebra Linear Semana 01

Álgebra Linear Semana 01 Álgebra Linear Semana 01 Diego Marcon 27 de Março de 2017 Conteúdo 1 Estrutura do Curso 1 2 Sistemas Lineares 1 3 Formas escalonadas e formas escalonadas reduzidas 4 4 Algoritmo de escalonamento 5 5 Existência

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

INE5317 Linguagens Formais e Compiladores AULA 9: Propriedades e Reconhecimento das Linguagens Livres do Contexto

INE5317 Linguagens Formais e Compiladores AULA 9: Propriedades e Reconhecimento das Linguagens Livres do Contexto INE5317 Linguagens Formais e Compiladores AULA 9: Propriedades e Reconhecimento das Linguagens Livres do Contexto baseado em material produzido pelo prof Paulo Bauth Menezes e pelo prof Olinto José Varela

Leia mais

Capítulo 8: O problema da parada. Decidibilidade e computabilidade. José Lucas Rangel Introdução.

Capítulo 8: O problema da parada. Decidibilidade e computabilidade. José Lucas Rangel Introdução. Capítulo 8: O problema da parada. Decidibilidade e computabilidade. José Lucas Rangel 8.1 - Introdução. Como observado no capítulo anterior, podemos substituir a definição informal de procedimento pela

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

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

Número: Nome: 1. (3.0 val.) Considere um analisador lexical contendo a sequência ordenada de

Número: Nome: 1. (3.0 val.) Considere um analisador lexical contendo a sequência ordenada de Compiladores, LEIC Alameda Compiladores, LEIC Alameda 1/6 Ano Lectivo 2010/2011, 2º Semestre Ano Lectivo 2010/2011, 2º Semestre Teste 1, 2011/04/02, 09:00, 90 minutos Teste 1 (2011/04/02, 09:00, 90 minutos)

Leia mais

Análise sintática. Análise sintática. Top-down ou descendente. Com retrocesso: por tentativa e erro. Preditiva: para gramáticas LL(1) 09/04/2012

Análise sintática. Análise sintática. Top-down ou descendente. Com retrocesso: por tentativa e erro. Preditiva: para gramáticas LL(1) 09/04/2012 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

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO 2. Linguagens Livres-do-Contexto Referência: SIPSER, M. Introdução à Teoria da Computação. 2ª edição, Ed. Thomson Prof. Marcelo S. Lauretto marcelolauretto@usp.br

Leia mais

8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 8. Árvores Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 Árvores - estruturas não lineares (1) Uma lista é um exemplo de uma estrutura de dados

Leia mais

8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 8. Árvores Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 Árvores - estruturas não lineares (1) Uma lista é um exemplo de uma estrutura de dados

Leia mais

QUESTÃO 1 (0,6 ponto) Classifique os processadores de linguagens com relação aos tipos das linguagens-fonte e objeto.

QUESTÃO 1 (0,6 ponto) Classifique os processadores de linguagens com relação aos tipos das linguagens-fonte e objeto. COMPILADORES Prof. Marcus Ramos Prova 1 07 de março de 2012 QUESTÃO 1 (0,6 ponto) Classifique os processadores de linguagens com relação aos tipos das linguagens-fonte e objeto. Tanto a linguagem-fonte

Leia mais

TEORIA DAS LINGUAGENS 3. GRAMÁTICAS INDEPENDENTES DE CONTEXTO

TEORIA DAS LINGUAGENS 3. GRAMÁTICAS INDEPENDENTES DE CONTEXTO LICENCIATURA EM CIÊNCIAS DA COMPUTAÇÃO TEORIA DAS LINGUAGENS 3. GRAMÁTICAS INDEPENDENTES DE CONTEXTO José Carlos Costa Dep. Matemática e Aplicações Universidade do Minho Braga, Portugal 31 de Maio de 2010

Leia mais

Capítulo II Gramáticas

Capítulo II Gramáticas Capítulo II Gramáticas II.1 Motivação O que é uma Gramática? Um sistema gerador de linguagens; Um sistema de reescrita; Uma maneira finita de representar uma linguagem; Um dispositivo formal usado para

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

Linguagens livres de contexto e autômatos de pilha

Linguagens livres de contexto e autômatos de pilha Capítulo 6: Linguagens livres de contexto e autômatos de pilha José Lucas Rangel, maio 1999 6.1 - Introdução. Os aceitadores, ou reconhecedores, das linguagens livres de contexto são os chamados autômatos

Leia mais

Construção de Compiladores

Construção de Compiladores Construção de Compiladores Parte 1 Introdução Linguagens e Gramáticas F.A. Vanini IC Unicamp Klais Soluções Motivação Porque compiladores? São ferramentas fundamentais no processo de desenvolvimento de

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

Teoria da Computação

Teoria da Computação e Linguagens Algébricas Teoria da Computação Simão Melo de Sousa Computer Science Department University of Beira Interior, Portugal e Linguagens Algébricas Plano 1 Introduction Contexto 2 Constituição

Leia mais

Lista de Exercícios CT-200 Primeiro Bimestre Carlos Henrique Quartucci Forster Estagiário: Wesley Telles. Revisão de Teoria de Conjuntos

Lista de Exercícios CT-200 Primeiro Bimestre Carlos Henrique Quartucci Forster Estagiário: Wesley Telles. Revisão de Teoria de Conjuntos Lista de Exercícios CT-200 Primeiro Bimestre 2010 Carlos Henrique Quartucci Forster Estagiário: Wesley Telles Revisão de Teoria de Conjuntos 1. Sejam A = {1,2 } e B = { x, y, z}. Quais os elementos dos

Leia mais

Compiladores. Análise Sintática

Compiladores. Análise Sintática Compiladores Análise Sintática Cristiano Lehrer, M.Sc. Introdução (1/3) A análise sintática constitui a segunda fase de um tradutor. Sua função é verificar se as construções usadas no programa estão gramaticalmente

Leia mais

Linguagens Formais e Autômatos

Linguagens Formais e Autômatos Linguagens Formais e Autômatos Conversão de Expressões Regulares (ER) para Autômatos Finitos Determinísticos (AFD) Cristiano Lehrer, M.Sc. Introdução A construção sistemática de um Autômato Finito para

Leia mais

Nelma Moreira. Departamento de Ciência de Computadores da FCUP. Aula 2. Nelma Moreira (DCC-FC) Fundamentos de Linguagens de Programação Aula 2 2 / 12

Nelma Moreira. Departamento de Ciência de Computadores da FCUP. Aula 2. Nelma Moreira (DCC-FC) Fundamentos de Linguagens de Programação Aula 2 2 / 12 Fundamentos de Linguagens de Programação Nelma Moreira Departamento de Ciência de Computadores da FCUP Fundamentos de Linguagens de Programação Aula 2 Nelma Moreira (DCC-FC) Fundamentos de Linguagens de

Leia mais

Derivadas de funções reais de variável real

Derivadas de funções reais de variável real Derivadas de funções reais de variável real O conceito de derivada tem grande importância pelas suas inúmeras aplicações em Matemática, em Física e em muitas outras ciências. Neste capítulo vamos dar a

Leia mais

Linguagens recursivamente enumeráveis

Linguagens recursivamente enumeráveis Linguagens recursivamente enumeráveis Uma palavra x Σ é aceite por uma máquina de Turing M ( x L(M)) se M iniciando com a palavra x na fita e no estado inicial, pára num estado final. Caso contrário, M

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