Como construir um compilador utilizando ferramentas Java
|
|
|
- Vasco Batista Tuschinski
- 8 Há anos
- Visualizações:
Transcrição
1 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 [email protected]
2 Como construir um compilador utilizando ferramentas Java p. 2/2 Ascendente descendente Dada uma GLC, a análise sintática baseada nessa GLC pode ser ascendente ou descendente. Um analisador ascendente agrupa os símbolos da entrada para formar os símbolos não terminais mais distantes do símbolo inicial da GLC ou que estão em níveis inferiores na estrutura da linguagem. Na análise descendente, parte-se do símbolo inicial da GLC e busca-se identificar na entrada as construções que correspondem às produções da GLC.
3 Como construir um compilador utilizando ferramentas Java p. 3/2 Descendente recursiva Um analisador descendente recursivo utiliza essa última estratégia. Recursivo, pois a cada símbolo não terminal da GLC corresponde um método (muitas vezes recursivo). Cada método deve ler a entrada e reconhecer a estrutrutura do não-terminal.
4 Como construir um compilador utilizando ferramentas Java p. 4/2 Exemplo classdecl class ident [ extends ident ] classbody
5 Como construir um compilador utilizando ferramentas Java p. 4/2 Exemplo classdecl class ident [ extends ident ] classbody verificar se o próximo token da entrada é class.
6 Como construir um compilador utilizando ferramentas Java p. 4/2 Exemplo classdecl class ident [ extends ident ] classbody verificar se o próximo token da entrada é class. verificar se o próximo token é ident.
7 Como construir um compilador utilizando ferramentas Java p. 4/2 Exemplo classdecl class ident [ extends ident ] classbody verificar se o próximo token da entrada é class. verificar se o próximo token é ident. verificar se o próximo token é extends. Se não for, deve continuar a análise, pois essa parte da produção é opcional. Se for, deve verificar se o token seguinte é um ident. Se for, deve continuar com a análise.
8 Como construir um compilador utilizando ferramentas Java p. 4/2 Exemplo classdecl class ident [ extends ident ] classbody verificar se o próximo token da entrada é class. verificar se o próximo token é ident. verificar se o próximo token é extends. Se não for, deve continuar a análise, pois essa parte da produção é opcional. Se for, deve verificar se o token seguinte é um ident. Se for, deve continuar com a análise. verificar se o resto da entrada corresponde ao não-terminal classboby. Isso não é feito diretamente pelo método, mas, sim, invocando o método correspondente àquele não-terminal.
9 Como construir um compilador utilizando ferramentas Java p. 5/2 Exemplo void classdecl() { if ( curtoken.type == CLASS) // token corrente é "class" analex(); // chama AL. curtoken recebe novo token else SintaticError(); // ocorreu erro sintático if ( curtoken.type == IDENT) // token corrente é identificador analex(); else SintaticError(); if ( curtoken.type == EXTENDS) // token corrente é "extends" { analex(); if ( curtoken.type == IDENT) // token é identificador analex(); else SintaticError(); } classbody(); }
10 Como construir um compilador utilizando ferramentas Java p. 6/2 Gramáticas LL(1) Cuidado na escolha da grámática.
11 Como construir um compilador utilizando ferramentas Java p. 6/2 Gramáticas LL(1) Cuidado na escolha da grámática. O primeiro L significa left to right e indica que a leitura da entrada é feita da esquerda para a direita.
12 Como construir um compilador utilizando ferramentas Java p. 6/2 Gramáticas LL(1) Cuidado na escolha da grámática. O primeiro L significa left to right e indica que a leitura da entrada é feita da esquerda para a direita. O segundo L significa left linear e indica que sempre o símbolo não terminal que estiver mais à esquerda será reconhecido primeiro.
13 Como construir um compilador utilizando ferramentas Java p. 6/2 Gramáticas LL(1) Cuidado na escolha da grámática. O primeiro L significa left to right e indica que a leitura da entrada é feita da esquerda para a direita. O segundo L significa left linear e indica que sempre o símbolo não terminal que estiver mais à esquerda será reconhecido primeiro. E o número 1 indica que o número de símbolos de lookahead necessários é 1.
14 Como construir um compilador utilizando ferramentas Java p. 7/2 Gramática LL(1)? classdecl class ident [ extends ident ] classbody
15 Como construir um compilador utilizando ferramentas Java p. 7/2 Gramática LL(1)? classdecl class ident [ extends ident ] classbody classdecl class ident classbody class ident extends ident classbody
16 Como construir um compilador utilizando ferramentas Java p. 8/2 Tabela preditiva Indica qual caminho seguir S A asab baa bab c Terminais Não-terminal a b c S A S asab S baa A bab A c As posições vazias ou mais do que uma produção.
17 Como construir um compilador utilizando ferramentas Java p. 9/2 Recursão à esquerda Um caso típico de problemas ao construir a tabela preditiva é relativo à a existência de recursão à esquerda. B Bα A partir de B podemos gerar uma forma sentencial em que o próprio B aparece como primeiro símbolo. Ao tentar reconhecer B, o AS descendente recursivo invoca o método correspondente ao não-terminal. Olhando para o token da entrada, esse método pode escolher um caminho que leve ao aparecimento de outro B, sem que nenhum token tenha sido consumido o que caracteriza a recursão à esquerda.
18 Como construir um compilador utilizando ferramentas Java p. 10/2 Construção da tabela preditiva À primeira vista, pode parecer fácil calcular a tabela preditiva de uma GLC. Basta olhar quais são os tokens que iniciam as produções do não-terminal B e colocar na linha de B, na coluna desses tokens, as produções que eles iniciam. Porém, existem diversas situações que podem complicar essa tarefa.
19 Como construir um compilador utilizando ferramentas Java p. 11/2 Dificuldade I Se temos B Aα Cβ, então é preciso saber quais são os tokens que iniciam as produções de A e C para decidir qual produção utilizar. E essa situação pode se propagar, uma vez que A e C podem também iniciar com não-terminais. prog class ident [ classbody ] classbody funcbody. vardecl ;
20 Como construir um compilador utilizando ferramentas Java p. 12/2 Dificuldade II Se temos B A 1 A 2...A n aα, precisamos saber se A 1,... A n podem gerar a cadeia vazia. Se isso acontecer, então o token a também deve ser utilizado para decidir qual produção de B utilizar. prog class ident [ classbody ] classbody funcbody vardecl ; funcbody [ algumacoisa ] vardecl [ outracoisa ]
21 Como construir um compilador utilizando ferramentas Java p. 13/2 Dificuldade III Se temos A abb;b α e α λ, então b deve ser considerado como um token que deve ser utilizado para decidir pela produção B α ao tentar reconhecer B. prog class ident classbody ; classbody funcbody vardecl. funcbody [ algumacoisa ] vardecl [ outracoisa ]
22 Como construir um compilador utilizando ferramentas Java p. 14/2 Algoritmo para construir a TP Adicionar $, que aparece no fim da cadeia Computar FIRST: Seja α uma forma sentencial da gramática. Então FIRST(α) é definido como o conjunto de todos os símbolos terminais a tal que α aβ, ou seja, o conjunto de terminais que iniciam alguma cadeia derivada a partir de α. Computar FOLLOW: Seja B um não-terminal da gramática e S o seu símbolo inicial. O conjunto FOLLOW(B) é formado pelos terminais a tal que S αbaβ, ou seja, existe uma forma sentencial derivável a partir do símbolo inicial em que a aparece imediatamente à direita de B.
23 Como construir um compilador utilizando ferramentas Java p. 15/2 FIRST para o terminal a, FIRST(a) = {a}; para o não-terminal B, tal que B A 1 A 2...A n, onde A i são símbolos terminais ou não terminais, fazemos: inicialmente FIRST(B) = {} repetimos FIRST(B) = FIRST(B) FIRST(A i ), para i = 1, 2,... até que encontremos algum i tal que A i não deriva λ; para um string α = A 1 A 2...A n, onde A i são símbolos terminais ou não terminais, fazemos: repetimos FIRST(α) = FIRST(α) FIRST(A i ), para i = 1, 2,... até que encontremos algum i tal que A i não deriva λ.
24 Como construir um compilador utilizando ferramentas Java p. 16/2 Exemplo expression term expression expression term [expression ] +term [expression ] λ term factor term term factor [term ] /factor [term ] λ f actor ident constant (expression)
25 Como construir um compilador utilizando ferramentas Java p. 17/2 FIRST: exemplo FIRST($) = {$}
26 Como construir um compilador utilizando ferramentas Java p. 17/2 FIRST: exemplo FIRST($) = {$} FIRST(+) = {+}
27 Como construir um compilador utilizando ferramentas Java p. 17/2 FIRST: exemplo FIRST($) = {$} FIRST(+) = {+} FIRST(-) = {-}
28 Como construir um compilador utilizando ferramentas Java p. 17/2 FIRST: exemplo FIRST($) = {$} FIRST(+) = {+} FIRST(-) = {-} FIRST(*) = {*}
29 Como construir um compilador utilizando ferramentas Java p. 17/2 FIRST: exemplo FIRST($) = {$} FIRST(+) = {+} FIRST(-) = {-} FIRST(*) = {*} FIRST(/) = {/ }
30 Como construir um compilador utilizando ferramentas Java p. 17/2 FIRST: exemplo FIRST($) = {$} FIRST(+) = {+} FIRST(-) = {-} FIRST(*) = {*} FIRST(/) = {/ } FIRST(ident) = {ident}
31 Como construir um compilador utilizando ferramentas Java p. 17/2 FIRST: exemplo FIRST($) = {$} FIRST(+) = {+} FIRST(-) = {-} FIRST(*) = {*} FIRST(/) = {/ } FIRST(ident) = {ident} FIRST(constant) = {constant}
32 Como construir um compilador utilizando ferramentas Java p. 17/2 FIRST: exemplo FIRST($) = {$} FIRST(+) = {+} FIRST(-) = {-} FIRST(*) = {*} FIRST(/) = {/ } FIRST(ident) = {ident} FIRST(constant) = {constant} FIRST(( ) = {(}
33 Como construir um compilador utilizando ferramentas Java p. 17/2 FIRST: exemplo FIRST($) = {$} FIRST(+) = {+} FIRST(-) = {-} FIRST(*) = {*} FIRST(/) = {/ } FIRST(ident) = {ident} FIRST(constant) = {constant} FIRST(( ) = {(} FIRST(factor) = {ident, constant, (}
34 Como construir um compilador utilizando ferramentas Java p. 18/2 FIRST: exemplo FIRST(term ) = {*, / }
35 Como construir um compilador utilizando ferramentas Java p. 18/2 FIRST: exemplo FIRST(term ) = {*, / } FIRST(term) = {ident, constant, (}
36 Como construir um compilador utilizando ferramentas Java p. 18/2 FIRST: exemplo FIRST(term ) = {*, / } FIRST(term) = {ident, constant, (} FIRST(expression ) = {+, -}
37 Como construir um compilador utilizando ferramentas Java p. 18/2 FIRST: exemplo FIRST(term ) = {*, / } FIRST(term) = {ident, constant, (} FIRST(expression ) = {+, -} FIRST(expression) = {ident, constant, (}
38 Como construir um compilador utilizando ferramentas Java p. 19/2 FOLLOW adicionar o indicador de fim de cadeia $ ao conjunto FOLLOW(S), onde S é o símbolo inicial da GLC; dada a produção B αaβ, fazemos: FOLLOW(A) = FOLLOW(A) FIRST(β) se β λ, então fazemos FOLLOW(A) = FOLLOW(A) FOLLOW(B).
39 Como construir um compilador utilizando ferramentas Java p. 20/2 FOLLOW: exemplo FOLLOW(expression) = {$, )} FOLLOW(expression ) = {$, )} FOLLOW(term) = {+, -, $, )} FOLLOW(term ) = {+, -, $, )} FOLLOW(factor) = {*, /, +, -, $, )}
40 Como construir um compilador utilizando ferramentas Java p. 21/2 Finalizando a tabela dada a produção B α, para todo terminal a FIRST(α), devemos colocar essa produção na posição (B, a) da tabela; dada a produção B α, onde α λ, para todo terminal a FOLLOW(B), devemos colocar essa produção na posição (B, a) da tabela.
41 Como construir um compilador utilizando ferramentas Java p. 22/2 Resultado Terminais Não terminais ident constant +, - *, / ( ) $ expression expression term term factor 7 8 9
42 Como construir um compilador utilizando ferramentas Java p. 23/2 Resultado (1)expression term expression (2)expression +term expression (3)expression λ (4)term factor term (5)term factor term (6)term λ (7)factor ident (8)f actor constant (9)f actor (expression)
43 Como construir um compilador utilizando ferramentas Java p. 24/2 Como usar a TP A tabela preditiva pode ser usada, além da verificação da gramática, para construir o AS. Para implementar o método de um não-terminal, podemos olhar a tabela e determinar para cada terminal válido quais são as seqüências de ações a tomar, como, por exemplo, consumir um terminal ou invocar os métodos de outros não-terminais.
44 Como construir um compilador utilizando ferramentas Java p. 24/2 Como usar a TP A tabela preditiva pode ser usada, além da verificação da gramática, para construir o AS. Para implementar o método de um não-terminal, podemos olhar a tabela e determinar para cada terminal válido quais são as seqüências de ações a tomar, como, por exemplo, consumir um terminal ou invocar os métodos de outros não-terminais. Porém, se a linguagem é complexa, o cálculo da tabela preditiva e a construção do AS de forma manual são tarefas árduas. Ainda mais se estivermos trabalhando com uma gramática na BNF, pois, como vimos, o cálculo dos conjuntos FIRST e FOLLOW consideram apenas produções normais, sem os operadores da BNF.
45 Como construir um compilador utilizando ferramentas Java p. 25/2 Como usar a TP Nesse ponto entram os programas como o JavaCC, que, baseado na definição da linguagem em BNF, gera todos os métodos correspondentes aos não-terminais e verifica possíveis problemas, avisando ao implementador os pontos da gramática que os originaram.
46 Como construir um compilador utilizando ferramentas Java p. 26/2 Exercícios Dê exemplo de uma gramática que gera uma tabela preditiva com mais de uma entrada em alguma posição. Dê exemplo de uma gramática com recursão à esquerda. Elimine a recursão à esquerda. Dê exemplos, retirados da gramática de X ++ que mostrem as três dificuldades na construção da tabela preditiva. Compute o FIRST e FOLLOW de alguns símbolos de X ++.
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
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
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 4 Análise Léxica Prof. Márcio Delamaro [email protected] Como construir
Como construir um compilador utilizando ferramentas Java
Como construir um compilador utilizando ferramentas Java p. 1/3 Como construir um compilador utilizando ferramentas Java Aula 3 A linguagem X ++ Prof. Márcio Delamaro [email protected] Como construir
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. [email protected] Data Conteúdo 23/09/2013 3. Análise Sintática: 3.1 analisadores
Compiladores Analisador Sintático. Prof. Antonio Felicio Netto Ciência da Computação
Compiladores Analisador Sintático Prof. Antonio Felicio Netto [email protected] Ciência da Computação 1 Análise Sintática - A Análise Sintática constitui a segunda fase de um tradutor de uma
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
Como construir um compilador utilizando ferramentas Java
Como construir um compilador utilizando ferramentas Java p. 1/3 Como construir um compilador utilizando ferramentas Java Aula 7 Análise Sintática no JavaCC Prof. Márcio Delamaro [email protected] Como
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
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
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
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,
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,
Compiladores. Análise Sintática
Compiladores Análise Sintática Análise Sintática Vejamos um exemplo, seja a seguinte instrução de atribuição: posicao = inicial + incremento * 60 Na análise sintática tenta-se construir uma frase correta
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 2 BNF e Grafo Sintático Prof. Márcio Delamaro [email protected] Como construir
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,
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
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
Análise sintática. Prof. Thiago A. S. Pardo Tratamento de erros sintáticos
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
Compiladores Aula 6. Celso Olivete Júnior.
Aula 6 Celso Olivete Júnior [email protected] Na aula passada Analisadores Sintáticos Descendentes ASD com retrocesso ASD preditivo recursivo não-recursivo 2 ASD Preditivo Recursivo Projeto Parte 2
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
Como construir um compilador utilizando ferramentas Java
Como construir um compilador utilizando ferramentas Java p. 1/4 Como construir um compilador utilizando ferramentas Java Aula 9 Construção da árvore sintática Prof. Márcio Delamaro [email protected]
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
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
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
Conceitos de Linguagens de Programação
Conceitos de Linguagens de Programação Aula 06 Análise Sintática (Implementação) Edirlei Soares de Lima Análise Sintática A maioria dos compiladores separam a tarefa da análise sintática
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
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
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
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
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: [email protected] URL: www.inf.ufsc.br/~silveira Definições preliminares Parser (Analisador
INE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:
INE5416 Paradigmas de Programação Ricardo Azambuja Silveira INE CTC UFSC E Mail: [email protected] URL: www.inf.ufsc.br/~silveira Conceitos Léxica estudo dos símbolos que compõem uma linguagem Sintaxe
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
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
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
Gramática. Prof. Yandre Maldonado e Gomes da Costa. Prof. Yandre Maldonado - 1
Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa [email protected] Prof. Yandre Maldonado - 2 Mecanismo gerador que permite definir formalmente uma linguagem; Através de uma gramática
Gramática. Gramática. Gramática
Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa [email protected] Prof. Yandre Maldonado - 2 Mecanismo gerador que permite definir formalmente uma linguagem; Através de uma gramática
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
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
Gramática Livre de Contexto
Gramática Livre de Contexto Prof. Yandre Maldonado - 1 Árvore de derivação Ambigüidade Simplificação de Gramática Forma Normal de Chomsky (FNC) Forma Normal de Greibach (FNG) Prof. Yandre Maldonado e Gomes
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
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)
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
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. [email protected] Data Conteúdo 23/09/2013 3. Análise Sintática: 3.1 analisadores
Familiarização com a ferramenta JavaCC
Ficha nº 2 Familiarização com a ferramenta JavaCC Estrutura do ficheiro JavaCC O JavaCC utiliza um ficheiro com a extensão.jj, onde são descritos, pelo utilizador, o léxico e a sintaxe da linguagem e gera
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
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 1 - Introdução Prof. Márcio Delamaro [email protected] Como construir um
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
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?
Compiladores. Capítulo 3: Análise Sintática Introdução
Compiladores Capítulo 3: Análise Sintática 3.1 - Introdução O problema da análise sintática para uma dada gramática livre de contexto, consiste em descobrir, para uma cadeia x qualquer, se a cadeia pertence
Compiladores Aula 4. Celso Olivete Júnior.
Aula 4 Celso Olivete Júnior [email protected] 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
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.
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 01 Prof. [email protected] Continuação... Próxima aula 2 Análise léxica x Análise sintática
Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.
Sintaxe e Semântica George Darmiton da Cunha Cavalcanti ([email protected]) Tópicos Introdução O problema de descrever a sintaxe Métodos formais para descrever a sintaxe Gramáticas de atributos Descrevendo
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
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
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
Gramática Livre de Contexto
Prof. Yandre Maldonado - 1 Gramática Livre de Contexto Árvore de derivação Ambigüidade Simplificação de Gramática Forma Normal de Chomsky (FNC) (FNG) Prof. Yandre Maldonado e Gomes da Costa [email protected]
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
Análise Sintática Descendente
Análise Sintática Descendente Uma tentativa de construir uma árvore de derivação da esquerda para a direita Cria a raiz e, a seguir, cria as subárvores filhas. Produz uma derivação mais à esquerda da sentença
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
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
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
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
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:
Compiladores Aula 1. Celso Olivete Júnior.
Aula 1 Celso Olivete Júnior [email protected] Tópicos da disciplina Introdução à compilação Analisador léxico Analisador sintático descendente Analisador sintático ascendente Análise semântica Geração
