Tradução dirigida por sintaxe
|
|
- Luciana Lameira de Caminha
- 6 Há anos
- Visualizações:
Transcrição
1 epartamento de Estatística e Informática Universidade Federal de Sergipe Compiladores Tradução dirigida por sintaxe André Luis Meneses Silva andreluis.ms@gmail.com 1
2 efinições dirigidas por sintaxe Gramática + regras (ações) semânticas Cada símbolo possui um atributo Regras definem os valores dos atributos Cada produção tem sua(s) regra(s) Regras são avaliadas quando a produção é aplicada Gramática de atributos efn. dirigida por sintaxe onde as regras não têm efeitos colaterais (paradigma funcional) 2
3 Exemplo em CUP terminal Integer UM; non terminal Integer expr;... expr ::= expr:a PLUS expr:b {: RESULT = new Integer(a.intValue() + b.intvalue()); :} expr:a TIMES expr:b {: RESULT = new Integer(a.intValue() * b.intvalue()); :} LPARE expr:a RPARE {: RESULT = a :} UM : i {: RESULT = i :} ; 3
4 Atributos sintetizados e herdados Considere a árvore de derivação: O valor de um atributo sintetizado é definido em função dos valores dos atributos dos filhos Exemplo anterior Atributos herdados dependem dos irmãos e/ou o pai T L { L.type = T.type } L id, L1 { L1.type = L.type; id.type=l.type } L id { id.type = L.type } Cup só trabalha com atributos sintetizados 4
5 Exemplo: números simples 1 {.v = 1.v*10 +.v } {.v =.v } 0 {.v = 0 } 1 {.v = 1 }... 9 {.v = 9 } 5
6 Exemplo: números simples Qual é mais adequada para definir o valor semântico de somente com atributos sintetizados? 1 {.v = 1.v*10 +.v } {.v =.v } 0 {.v = 0 } 1 {.v = 1 }... 9 {.v = 9 } S {.h = 0; } 1 {.s = 1.s ; 1.h =.h*10 +.s } {.s =.h*10 +.s; } 0 {.s = 0 } 1 {.s = 1 }... 9 {.s = 9 } 6
7 Árvore de derivação 901 árvore de derivação
8 Árvore de derivação 901 árvore de derivação 1 {.v = 1.v*10+.v } {.v =.v } 0 {.v = 0 } 1 {.v = 1 }... 9 {.v = 9 }
9 Árvore de derivação 901 árvore de derivação 1 {.v = 1.v*10+.v } {.v =.v } 0 {.v = 0 } 1 {.v = 1 }... 9 {.v = 9 } 1 0.v = 9 9 9
10 Árvore de derivação 901 árvore de derivação 1 {.v = 1.v*10+.v } {.v =.v } 0 {.v = 0 } 1 {.v = 1 }... 9 {.v = 9 }.v = v =
11 Árvore de derivação 901 árvore de derivação 1 {.v = 1.v*10+.v } {.v =.v } 0 {.v = 0 } 1 {.v = 1 }... 9 {.v = 9 }.v = 9.v = 9.v = 90 0.v =
12 Árvore de derivação 901 árvore de derivação.v = {.v = 1.v*10+.v } {.v =.v } 0 {.v = 0 } 1 {.v = 1 }... 9 {.v = 9 }.v = 9.v = 9.v = v = 0.v =
13 Implementando Atributos Sintetizados LR Empilha-se o valor do atributo junto com o símbolo/estado Quando há redução, a respectiva regra semântica é avaliada (, * 8 $) (<UM,2>, + 4 * 8 $) (<expr,2>, + 4 * 8 $) ( <expr,2><plus>, 4 * 8 $) (<expr,2><plus><um,4>, * 8 $) (<expr,2><plus><expr,4>, * 8 $) (<expr,2><plus><expr,4><times>, 8 $) (<expr,2><plus><expr,4><times><um,8>, $) (<expr,2><plus><expr,4><times><expr,8>, $) (<expr,2><plus><expr,32>, $) (<expr,34>, $) 13
14 Ações com efeitos colaterais Gramáticas de atributos são declarativas As vezes é interessante escrever ações com efeitos colaterais Maior cuidado pois a execução das ações depende da ordem em que as produções são reduzidas Ex. Uma calculadora interativa com ações imperativas 4+9 ; <ETER> 13 5*(4+2); <ETER> 30 <EOF> 14
15 Implementação com o CUP terminal SEMI, PLUS, TIMES, LPARE, RPARE; terminal Integer UMBER; // com atributo non terminal Integer expr; non terminal expr_, calc; // com atributo precedence left PLUS; precedence left TIMES; 15
16 calc ::= expr_ SEMI calc expr_ SEMI {: System.out.println("BYE"); :} ; expr_ ::= expr:e {: System.out.println(e.toString()); :} ; expr ::= expr:a PLUS expr:b {: RESULT = new Integer(a.intValue() + b.intvalue()); :} expr:a TIMES expr:b {: RESULT = new Integer(a.intValue() * b.intvalue()); :} LPARE expr:a RPARE {: RESULT = a :} UM : i {: RESULT = i :} ; 16
17 Ações imperativas exigem cuidado Como se comportam os parsers das seguinte gramáticas? calc ::= expr:e SEMI calc {: System.out.println(e.toString()); :} expr:e SEMI {: System.out.println(e.toString()); System.out.println("BYE"); :} ; expr ::=... 17
18 Ações imperativas exigem cuidado Como se comportam os parsers das seguinte gramáticas? calc ::= expr:e SEMI calc {: System.out.println(e.toString()); :} expr:e SEMI {: System.out.println(e.toString()); System.out.println("BYE"); :} ; expr ::=... calc ::= calc expr:e SEMI {: System.out.println(e.toString()); :} expr:e SEMI {: System.out.println(e.toString()); System.out.println("BYE"); :} ; expr ::=... 18
19 s ::= calc {: System.out.println("BYE"); :} ; calc ::= calc expr:e SEMI {: System.out.println(e.toString()); :} expr:e SEMI {: System.out.println(e.toString()); :} ; expr ::=... 19
20 Ações embutidas calc ::= calc expr:e {: System.out.println(e.toString()); :} SEMI expr:e SEMI {: System.out.println(e.toString()); :} ; expr ::=... Quando são executadas as ações embutidas? São tratadas como não terminais (um novo para c/ação) Uma produção vazia é adicionada para c/ação Conflitos podem ser introduzidos calc ::= calc expr:e $_1 SEMI... $_1 ::= {: System.out.println(e.toString()); :} ; 20
21 Implementação totalmente imperativa import java.util.*; action code {: List pilha = new Vector(); void push(int a) { pilha.add(pilha.size(), new Integer(a)); } int pop() { Integer i = (Integer) pilha.remove(pilha.size()-1); return i.intvalue(); } :} terminal PLUS, TIMES, SEMI, LPARE, RPARE; terminal Integer UM; non terminal expr, expr_, calc; precedence left PLUS; precedence left TIMES; 21
22 calc ::= expr_ SEMI calc expr_ SEMI {: System.out.println("BYE"); :} ; expr_ ::= expr {: System.out.println(pop()); :} ; expr ::= expr PLUS expr {: int a = pop(); int b = pop(); push(a+b); :} expr TIMES expr {: int a = pop(); int b = pop(); push(a*b); :} LPARE expr RPARE UM : i {: push(i.intvalue()); :} ; 22
23 Exemplo estendido: Todo um interpretador em Ações semânticas Prog Stm Stm Stm ; Stm id := Exp print ( ExpList ) Sintaxe de Straight-line Exp Exp BinOp Exp Stm, Exp ( Exp ) id num ExpList Exp, ExpList Exp BinOp + * 23
24 Interprete em Estilo Imperativo terminal Integer UM; terminal String I; terminal PLUS, TIMES, SEMI, COMMA, LPARE, RPARE, ASSIG, PRIT ; non terminal exp, stm, exps, prog; precedence right SEMI; precedence left PLUS; precedence left TIMES; 24
25 action code {: List pilha = new Vector(); void push(int a) { pilha.add(pilha.size(), new Integer(a)); } int pop() { Integer i = (Integer) pilha.remove(pilha.size()-1); return i.intvalue(); } :} Map mem = new HashMap(); void store(int v, String id) { mem.put(id, new Integer(v)); } int get(string id) { Integer v = (Integer) mem.get(id); return v.intvalue(); } 25
26 prog ::= stm ; stm ::= stm SEMI stm I:id ASSIG exp {: store(id,pop()); :} PRIT LPARE exps RPARE {: System.out.println(); :} ; exps ::= exp {: System.out.println(pop()); :} exps COMMA exp {: System.out.println(pop()); :} ; exp ::= exp PLUS exp {: int a = pop(); int b = pop(); push(a+b); :} exp TIMES exp {: int a = pop(); int b = pop(); push(a*b); :} LPARE exp RPARE stm COMMA exp UM : i {: push(i.intvalue()); :} I : id {: push(get(id)); :} ; 26
27 Misturando estilos // declarações de símbolos e precedências como antes, salvo: non terminal Integer exp ; action code {:... // só definições de get e store:} prog ::= stm ; stm ::= stm SEMI stm I:id ASSIG exp:e {: store(id,e.intvalue()); :} PRIT LPARE exps RPARE {: System.out.println(); :} ; exps ::= exp:e {: System.out.println(e.intValue()); :} exps COMMA exp:e {: System.out.println(e.intValue()); :} ; Impressão: ações semânticas com efeitos colaterais Avaliação de expressões: gramática de atributos
28 exp ::= exp:e1 PLUS exp:e2 {: RESULT = new Integer(e1.intValue()+ e2.intvalue(); :} exp TIMES exp {: RESULT = new Integer(e1.intValue()* e2.intvalue(); :} LPARE exp:e RPARE {: RESULT = e; :} stm COMMA exp:e {: RESULT = e; :} UM : i {: RESULT = i; :} I : id {: RESULT = new Integer(get(id)); :} ; 28
29 Ações Semânticas em LL Ações semânticas são misturadas com o fluxo de controle das ações do parser Ordem de avaliação é fácil predizer Atributos sintetizados Valor de retorno da função Atributos herdados Através de argumentos da função 29
30 Atributos sintetizados em LL E num + E1 { E.v = num.v + E1.v } num { E.v = num.v } LL(2) Atributos sintetizados são passados de filhos para pai através do retorno da função int E() { if (tok1.code == UM && tok2.code == PLUS ) { int i = tok1.value(); reconhece(um ); reconhece (PLUS); int j = E( ); return(i+j); } else if (tok1.code == UM && tok2.code == EOF) { int i = tok1.value; reconhece(um); return i; } else erro(); } 30
31 Atributos herdados em LL Se aumentarmos a operação -, o parser começa a complicar Podemos fatorar à esq. para termos LL(1) o entanto a gramáticade atributos precisa de atributos herdados E num E E + num E1 - num E { E.h = num.v ; E.v = E.v} { E1.h = E.h + num.v; E.v = E1.v } {... // similar } { E.v = E.h } O computo do + e associa a esq. ou a dir.? 31
32 Atributos herdados em LL Atributos herdados são passados de pai para filho através de argumentos da função de irmão (à esquerda) para irmão na avaliação da produção int E() {switch(tok.code) { case UM: int v = tok.value(); reconhece(um); return E (v); default: erro(); } } int E (int h) {switch(tok.code) { // h atributo herdado case PLUS: reconhece(plus); int v = reconhece(um); return E (h+v); case MIUS:... // similar case EOF : return h; default: erro(); } 32
33 Interprete de Expressões LL E T E E + T E Gramática de expressões por camadas e fatorada Primeiro(E) = { id, num, ( } T F T Primeiro(E ) = {,+, $ } T * F T... Seguinte(E) = { ), $ } F num ( E ) Seguinte(E ) = { ), $ } Exercício tipo prova:... Calcular a tabela de parser LL(1) ar uma gramática de atributos para um interpretador desta gramática Implementar na mão Extra: implementar usando JavaCC 33
34 Ações com efeitos colaterâis um interpretador de straight-line public class InterpretadorSL { Map mem =...; } void SimpleStm() {switch(tok.code) { case PRIT: reconhece(prit); reconhece(lpare); ExpList(); reconhece (RPARE) case I: String id = (String) tok.value(); reconhece (I); reconhece(assig); int v = Exp( ); mem.store(id,v); break; default: erro(); Embutimos ações semânticas no parser 34
35 void compoundstm {... } void ExpList( ) {switch(tok.code) { case...: int v = Exp( ); System.out.print(v+" "); reconhece(comma); ExpList(); break; case RPARE: System.out.println(); break; default: erro(); } int Exp ( ) {...} 35
36 Ações semânticas no JavaCC void SimpleStm( ) : { Token t; int v; } { print ( ExpList() ) t=<i> <ASSIG> v = Exp( ); { mem.store(t.image(),v); } }... void ExpList( ) : { int v; } { v = Exp( ) { System.out.print(v+" "); } ( <COMMA> v = Exp() { System.out.print(v+" "); } )* { System.out.println() } }... 36
37 Exercício opcional Completar o interpretador de straight-line na mão ou usando JavaCC 37
38 Exercício opcional Utilizando uma gramática de atributos escrita em JavaCC, dar uma implementação em estilo funcional do interpretador de straight-line efinir o tipo memória com funções int get(string), Memoria store(int,string) Atributos herdados são necessários? Atributo sintetizado de Stm Memória e Lista de valores (impressos), ou Memória (aqui a impressão será imperativa) Atributo de Exp? Atributo de Exps? Qual é a dificuldade de se fazer este exercício no Cup? 38
Compiladores - JACC. Fabio Mascarenhas
Compiladores - JACC Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp JACC Gerador de analisadores sintáticos LALR que gera código Java Sintaxe baseada na sintaxe do YACC (e de muitos outros
Leia maisRevisã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 maisParadigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura
Java First-Tier: Aplicações Orientação a Objetos em Java (I) Paradigmas de Programação Programação Funcional Programação Procedural Programação Orientada por Objetos Grupo de Linguagens de Programação
Leia maisLinguagens de Programação Aula 5
Aula 5 Celso Olivete Júnior olivete@fct.unesp.br Na aula anterior Ambiguidade Análise léxica Exercício calculadora 2/@ Na aula anterior AF calculadora 3/@ Na aula de hoje Análise léxica implementação Gramática
Leia maisCompiladores - 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 maisCompiladores - 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 maisV.2 Especificação Sintática de Linguagens de Programação
V.2 Especificação Sintática de Linguagens de Programação Deve ser baseada: No planejamento da Linguagem / Compilador Objetivos, Filosofia, Potencialidades,... Nos critérios de projeto/avaliação Legibilidade,
Leia maisFamiliarizaçã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
Leia maisAnálise Sintática - Final
MAB 471 2011.2 Análise Sintática - Final http://www.dcc.ufrj.br/~fabiom/comp LR(k ) vs LL(k ) Encontrando o próximo passo em uma derivação LR(k) Cada redução na análise detectável com o contexto esquerdo
Leia maisCOMPILADORES. Análise semântica. 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 semântica Tradução dirigida pela sintaxe Parte 02 Prof. geovanegriesang@unisc.br Sumário Data 18/11/2013 Análise
Leia maisIntrodução. Compiladores Análise Semântica. Introdução. Introdução. Introdução. Introdução 11/3/2008
Compiladores Análise Semântica Fabiano Baldo Análise Semântica é por vezes referenciada como análise sensível ao contexto porque lida com algumas semânticas simples tais como o uso de uma variável somente
Leia maisUm Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1
Definição de uma Linguagem Linguagem= sintaxe + semântica Especificação da sintaxe: gramática livre de contexto, BNF (Backus-Naur Form) Especificação Semântica: informal (textual), operacional, denotacional,
Leia maisCompiladores. Lex e Yacc / Flex e Bison. Ferramentas Flex/Bison
Ferramentas Flex/Bison Prof. Sergio F. Ribeiro Lex e Yacc / Flex e Bison São ferramentas de auxílio na escrita de programas que promovem transformações sobre entradas estruturadas. São ferramentas desenvolvidas
Leia mais1.2 Uma linguagem de programação muito simples
1 Representando programas como dados 1.1 Introdução Os processadores de linguagem sempre fazem alguma manipulação com programas. Normalmente a entrada para o processador é um programa apresentado na forma
Leia maisLinguagens de Domínio Específico
Linguagens de Domínio Específico Fabio Mascarenhas 2016.1 http://www.dcc.ufrj.br/~fabiom/dsl Processamento de uma DSL Análise Sintática Descendente O analisador sintático descendente é parecido com o analisador
Leia maisCompiladores - 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 maisV Teoria de Parsing. Termos Básicos: Parser Analisador Sintático Parsing Analise Sintática Parse Representação da analise efetuada
V Teoria de Parsing Termos Básicos: Parser Analisador Sintático Parsing Analise Sintática Parse Representação da analise efetuada Ascendentes: S + x (* Seq. Invertida Reducao *) dir Exemplo: Descendentes:
Leia maisAná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 maisTrabalhos de Laboratório de Interpretação e Compilação de Linguagens de Programação
Trabalhos de Laboratório de Interpretação e Compilação de Linguagens de Programação 11 de Maio de 2013 Os trabalhos práticos da disciplina de Interpretação e Compilação de Linguagens, incluindo o trabalho
Leia maisTRABALHO Nº 4: Desenvolvimento de um Interpretador ou de um Compilador
TRABALHO Nº 4: Desenvolvimento de um Interpretador ou de um Compilador A. Interpretador da Linguagem UAlg+ Pretende-se implementar um interpretador para uma linguagem de programação muito simples, designada
Leia maisCompiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 30. Instituto de C
ompiladores Análise Sintática Bruno Lopes Bruno Lopes ompiladores 1 / 30 Front-end Lida com a linguagem de entrada Teste de pertinência: código fonte linguagem fonte? Programa está bem formado? Sintaticamente?
Leia maisAnálise semântica. Função, interação com o compilador Tabela de símbolos Análise semântica. Prof. Thiago A. S. Pardo
Análise semântica Função, interação com o compilador Tabela de símbolos Análise semântica Prof. Thiago A. S. Pardo taspardo@icmc.usp.br 1 Estrutura geral de um compilador programa-fonte analisador léxico
Leia maisAná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 maisAnálise Bottom-Up. Compiladores. Parsing LR. Tabela Ações/Transições. Análise LR. Construindo tabelas LR
Análise Bottom-Up Compiladores Análise sintática 5) Gramáticas SLR), LR) e LALR String Entrada -> Símbolo Inicial Regras aplicadas em reverso adiar decisões mais poderoso Noção de handle, redução, uso
Leia maisP DC D #ID e C $I=EC e E T+E T T F*T F F (E) I I A B... Z
P DC D #ID e C $I=EC e E T+E T T F*T F F (E) I I A B... Z #A #A#B $A=B $A=B+C*D #A#B$A=B #A#B#C#D$A=B$B=C+D Todos os identificadores (I) utilizados nos comandos (C), tanto no lado esquerdo quanto do lado
Leia maisDiagramas Sintáticos
Diagramas Sintáticos Centro de Cálculo Instituto Superior de Engenharia de Lisboa Pedro Alexandre Pereira (palex@cc.isel.ipl.pt) Classe pública com método main Cada classe X pública é declarada num ficheiro
Leia maisCompiladores Análise Semântica
Compiladores Análise Semântica Fabio Mascarenhas - 2013.2 http://www.dcc.ufrj.br/~fabiom/comp Árvores Sintáticas Abstratas (ASTs) A árvore de análise sintática tem muita informação redundante Separadores,
Leia maisIntrodução Uma linguagem de programação apoiada em um paradigma imperativo apresenta algum grau de dificuldade nos aspectos relativos ao contexto;
Introdução Uma linguagem de programação apoiada em um paradigma imperativo apresenta algum grau de dificuldade nos aspectos relativos ao contexto; Nas linguagens imperativas o processamento é baseado no
Leia maisV 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 maisComo 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 delamaro@icmc.usp.br Como
Leia maisQUESTÃ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 maisCompilação da linguagem Panda
Construção de Compiladores I [BCC328] Atividades Práticas Compilação da linguagem Panda Departamento de Computação Universidade Federal de Ouro Preto Prof. José Romildo Malaquias 22 de abril de 2015 Resumo
Leia maisTradução Dirigida à Sintaxe. Prof. Ricardo Santos
radução Dirigida à Sintaxe Prof. Ricardo Santos 1 radução Dirigida à Sintaxe 1. Símbolos da gramática possuem atributos para manter informação das construções de LP que eles (os símbolos) representam 3.
Leia maisCompiladores - Análise Recursiva
Compiladores - Análise Recursiva Fabio Mascarenhas - 2013.2 http://www.dcc.ufrj.br/~fabiom/comp Analisador Recursivo Maneira mais simples de implementar um analisador sintático a partir de uma gramática,
Leia maisGrupo 3: 8,3 - Parte Léxica (2,0): 1,9 - Na parte I especificou tamanho de identificador com 512 caracteres, mas não tratou (-0,1) -Parte Sintática
Grupos revisem os problemas da análise léxica e sintática ANTES de passarem para as fases seguintes. Os grupos que não fizeram revisão hoje (13/5), podem fazer na semana dia 24/5 Grupo 1: 6,0 - Parte Léxica
Leia mais4. Constantes. Constantes pré-definidas
4. Constantes Constantes pré-definidas O PHP possui algumas constantes pré-definidas, indicando a versão do PHP, o Sistema Operacional do servidor, o arquivo em execução, e diversas outras informações.
Leia maisConstruçã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 maisAnálise Sintática. Fabiano Baldo
Compiladores Análise Sintática Fabiano Baldo Gramáticas Livre de Contexto (GLC) É utilizada na especificação formal lda sintaxe de uma linguagem de programação. É um conjunto de produções ou regras gramaticais
Leia maisCAP. VI ANÁLISE SEMÂNTICA
CAP. VI ANÁLISE SEMÂNTICA VI.1 Introdução Semântica SIGNIFICADO, SENTIDO LÓGICO, COERÊNCIA,... Diferença entre SINTAXE e SEMÂNTICA Sintaxe : descreve as estruturas de uma linguagem; Semântica : descreve
Leia maisComo 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 maisINE5416 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: silveira@inf.ufsc.br URL: www.inf.ufsc.br/~silveira Conceitos Léxica estudo dos símbolos que compõem uma linguagem Sintaxe
Leia maisIntrodução à Programação em C
Introdução à Programação em C Funções Resumo Aula Anterior Tabelas Strings (Tabelas de Caracteres) 2 1 Resumo Funções Definição Protótipo e implementação return e void Passagem por valor Exemplos 3 Funções
Leia maisCompiladores. 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 maisMAB 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 maisCIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO
REVISÃO POO INTRODUÇÃO À LINGUAGEM JAVA CRIANDO CLASSES EM JAVA Convenção de Nomes em Java Classes iniciam com letras maiúsculas Métodos, atributos e variáveis locais iniciam com minúsculas. Declaração
Leia maisProgramação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs
Programação Orientada a Objetos Professor: André Luis Meneses Silva andreluis.ms@gmail.com br.geocities.com/programacao2ufs [ Conteúdo ] Objeto Mensagens Classe Encapsulamento Visibilidade Membros de Instância
Leia maisAná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 maisTradução Dirigida Pela Sintaxe
Tradução Dirigida Pela Sintaxe Julho 2006 Sugestão de leitura: Livro do Aho, Sethi, Ullman (dragão) Seções 5.1 5.5 Tradução dirigida pela sintaxe É uma técnica que permite realizar tradução (geração de
Leia mais15/03/2018. Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação
Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação Conjunto de regras que definem a forma da linguagem; Como as sentenças podem ser formadas como sequências
Leia maisCompiladores - 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 maisProgramação por Objectos. Java
Programação por Objectos Java Parte 7: Interfaces LEEC@IST Java 1/31 Interfaces revisão (1) Uma interface é um conjunto de protótipos de métodos (sem implementações) que especifica um serviço bem definido:
Leia maisÁrvores. A Profundidade da Árvore B C D E. Árvores Implementação Genérica
Árvores Estrutura composta por nós e arcos direcionados Um dos nós é a raiz da árvore. Todo nó (exceto a raiz), possui um nó pai. Existe um único caminho da raíz até um nó. Uma árvore cujos nós possuem
Leia maisInterpretação e Compilação de Linguagens de Programação Semântica CALCI com Ambiente
Interpretação e Compilação de Linguagens de Programação Semântica CALCI com Ambiente 14 de Março de 2013 Nesta aula apresenta-se uma definição mais eficiente da semântica operacional da linguagem CALCI.
Leia maisGrupo 3: 8,5 (nota revisada) - Parte Léxica (2,0): 1,9 - Na parte I especificou tamanho de identificador com 512 caracteres, mas não tratou (-0,1)
Grupos revisem os problemas da análise léxica e sintática ANTES de passarem para as fases seguintes. Os grupos que não fizeram revisão hoje (13/5), podem fazer na semana dia 24/5 Grupo 1: 6,0 - Parte Léxica
Leia maisCOMPILADORES. Análise semântica. 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 semântica Parte 01 Prof. geovanegriesang@unisc.br Sumário Data 18/11/2013 Análise sintática Parte 01 25/11/2013
Leia maisLinguagens de Programação
Linguagens de Programação Fabio Mascarenhas - 2015.2 http://www.dcc.ufrj.br/~fabiom/lp Introdução Quais das expressões abaixo têm o mesmo significado? (vector-ref a 42) Introdução Quais das expressões
Leia maisIntrodução à Programação
Introdução à Programação Linguagens de Programação: sintaxe e semântica de linguagens de programação e conceitos de linguagens interpretadas e compiladas Engenharia da Computação Professor: Críston Pereira
Leia maisLinguagens e Programação BISON. Paulo Proença
Linguagens e Programação BISON BISON Gerador de analisadores sintáticos. Converte uma gramática independente de contexto LARL(1) 1 num programa C capaz de processar frases da linguagem. Gramática LARL(1)
Leia maisAnálise de Programação
Análise de Programação Fundamentos da Linguagem de Programação Java Prof. Gilberto B. Oliveira Variáveis Atributos: Variáveis Declaradas fora de um método, sem o modificador static Variáveis membro ou
Leia maisSCC 202 Algoritmos e Estruturas de Dados I. Pilhas (Stacks) (implementação dinâmica)
SCC 202 Algoritmos e Estruturas de Dados I Pilhas (Stacks) (implementação dinâmica) Operações alocação encadeada dinâmica typedef struct elem{ tipo_info info; struct elem *lig; tipo_elem; typedef struct{
Leia maisAnalisadores 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 maisIntrodução ao Java. Marco A L Barbosa malbarbo.pro.br. Departamento de Informática Universidade Estadual de Maringá
Introdução ao Java Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual
Leia maisIntrodução à Programação. Conceitos Básicos de Orientação a Objetos
Introdução à Programação Conceitos Básicos de Orientação a Objetos Tópicos da Aula Aprenderemos fundamentos do paradigma orientado a objetos, mas antes veremos o que é paradigma Conceito de paradigma Diferentes
Leia maisAnálise Sintática (Cap. 04) Análise Sintática Ascendente Analisador Sintático LR
Análise Sintática (Cap. 04) Análise Sintática Ascendente Analisador Sintático LR Análise Sintática LR Analisadores sintáticos LR(k): L, verificação da entrada da esquerda para direita R, constrói a derivação
Leia maisDepartamento de Ciência de Computadores Estruturas de Dados (CC114)
1. Cotação de cada pergunta: 1. 32 / 2. 38 / 3. 30 (Total: 100 pontos) 2. Responda às questões de forma clara e concisa nas folhas de exame distribuídas. 1. (Valorização: 32%) Responda às seguintes questões:
Leia maisVetores Unimensionais
Vetores Unimensionais Objetivos Entender a importância e a necessidade do uso de Vetores Definição de Manipulação de Vetores Inserir elementos em um vetor (usando laços ou não) Imprimir elementos de um
Leia maisMAB 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 maisCompiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 32. Instituto de C
ompiladores Introdução Bruno Lopes Bruno Lopes ompiladores 1 / 32 Apresentação Em que período estão? O quanto sabem de programação? Quais linguagens? O quanto sabem de unix? O quanto sabem de Linguagens
Leia maisI LINGUAGENS E PROCESSADORES: INTRODUÇÃO 1
PREÂMBULO PREFÂCIO xiii xv I LINGUAGENS E PROCESSADORES: INTRODUÇÃO 1 1 1.1 1.1.1 1.1.2 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 2 2.1 2.2 2.2.1 2.2.2 2.3 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.4 2.4.1 2.4.2
Leia maisExpressões e sentença de atribuição
Expressões e sentença de atribuição Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual
Leia maisCOMPILADORES. 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 maisCompiladores. 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 maisProgramação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO
Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO Introdução Criada em 1972, por Dennis Ritchie; Centro de Pesquisas da Bell Laboratories; Para utilização no S.O. UNIX; C é uma linguagem
Leia maisConceitos 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
Leia maisCapítulo 6: Linguagens de Programação
Capítulo 6: Linguagens de Programação Ciência da Computação: Uma Visão Abrangente 11a Edição by J. Glenn Brookshear Copyright 2012 Pearson Education, Inc. Capítulo 6: Linguagens de programação 6.1 Perspectiva
Leia maisControlo de Execução. K&R: Capitulo 3
Controlo de Execução K&R: Capitulo 3 IAED, 2009/2010 Controlo de Execução Instruções e Blocos if else-if switch Ciclos: Instruçõeswhile e for Instruçãodo-while break e continue goto e labels 2 IAED, 2009/2010
Leia maisAnálise Sintática. Compiladores Cristina C. Vieira. Compiladores 2012/2013
Análise Sintática Compiladores Cristina C. Vieira 1 Árvore Sintática Nós internos: símbolos não-terminais Folhas: símbolos terminais Arcos: de símbolos não-terminais do LHS da produção para nós do RHS
Leia maisCOMPILADORES. 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 maisAnalisadores Sintáticos LR
FACULDADE ANGLO AMERICANO FOZ DO IGUAÇU Curso de Ciência da Computação 7º Periodo Disciplina: Compiladores Prof. Erinaldo Sanches Nascimento Analisadores Sintáticos LR SLR LR Canônicos LALR Analisadores
Leia maisDescrição da Linguagem DECAF
Descrição da Linguagem DECAF Eduardo Ferreira dos Santos 24 de maio de 2017 Abstract The project for the course is to write a compiler for a language called Decaf. Decaf is a simple imperative language
Leia maisGenerics POO. Prof. Marcio Delamaro
Generics POO Prof. Marcio Delamaro Programação Orientada a Objetos Prof Marcio Delamaro ICMC/USP 1/39 O que são Tipos genéricos São uma forma de definir e utilizar classes de forma genérica Dá flexibilidade
Leia maisCompiladores. Fabio Mascarenhas
Compiladores Fabio Mascarenhas 2017.1 http://www.dcc.ufrj.br/~fabiom/comp Introdução Compiladores x Interpretadores Offline x Online Um compilador transforma um programa executável de uma linguagem fonte
Leia maisCompiladores Ciência e Tecnologia da Computação Engenharia Informática e de Computadores
Compiladores Ciência e Tecnologia da Computação Engenharia Informática e de Computadores Análise Semântica Universidade dos Açores Departamento de Matemática www.uac.pt/~hguerra Análise semântica 3ª etapa
Leia maisCompiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 31. Instituto de C
ompiladores Análise Léxica Bruno Lopes Bruno Lopes ompiladores 1 / 31 Front-end Lida com a linguagem de entrada Teste de pertinência: código fonte linguagem fonte? Programa está bem formado? Sintaticamente?
Leia maisLinguagens de Domínio Específico
Linguagens de Domínio Específico Fabio Mascarenhas 2016.1 http://www.dcc.ufrj.br/~fabiom/dsl Processamento de uma DSL PEGs As gramáticas de expressões de parsing, ou PEGs (parsing expression grammars)
Leia maisTipos Primitivos, estruturas de iteração e decisão.
Tipos Primitivos, estruturas de iteração e decisão. André Luis Meneses Silva andreluis.ms@gmail.com http://br.geocities.com/programacao2ufs/ Agenda Tipos Primitivos de Dados Variáveis e Constantes es Comandos
Leia maisCompiladores Análise Semântica
Compiladores Análise Semântica Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Árvores Sintáticas Abstratas (ASTs) A árvore de análise sintática tem muita informação redundante Separadores,
Leia maisIntrodução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis
Introdução a classes e objetos Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis Estruturas de Seleção if... else Operador condicional (? : ) switch Aula de Hoje Estruturas de Repetição: while/do... while/for
Leia maisLinguagens de Programação. Marco A L Barbosa
Expressões e sentença de atribuição Linguagens de Programação Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. http://github.com/malbarbo/na-lp-copl
Leia maisFabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes
Árvores Fabrício J. Barth BandTec - Faculdade de Tecnologia Bandeirantes Setembro de 2011 Tópicos Introdução Árvores binárias Implementação em Java Ordens de percurso em árvores binárias Altura de uma
Leia maisUniversidade Federal do ABC Rua Santa Adélia, Bairro Bangu - Santo André - SP - Brasil CEP Telefone/Fax:
Universidade Federal do ABC Rua Santa Adélia, 166 - Bairro Bangu - Santo André - SP - Brasil CEP 09.210-170 - Telefone/Fax: +55 11 4996-3166 1. CÓDIGO E NOME DA DISCIPLINA MC3201 - COMPILADORES 2. DISCIPLINA
Leia maisIntrodução a JAVA. Variáveis, tipos, expressões, comandos e blocos
+ Introdução a JAVA Variáveis, tipos, expressões, comandos e blocos +Roteiro 2 Variáveis e tipos Operadores aritméticos, lógicos, relacionais e bit-a-bit Atribuição Comandos básicos Ler, Escrever, Condicional,
Leia maisIntrodução a JAVA. Variaveis, tipos, expressões, comandos e blocos
Introdução a JAVA Variaveis, tipos, expressões, comandos e blocos Roteiro Variáveis e tipos Operadores aritméticos, lógicos, relacionais e bit-a-bit Atribuição Comandos básicos Ler, Escrever, Condicional,
Leia maisCompiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)
Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA) Expressões e Definições Regulares Revisão Expressões regulares descrevem todas as linguagens que podem ser construídas
Leia maisComo 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 delamaro@icmc.usp.br Como construir
Leia maisCompiladores - Especificando Sintaxe
Compiladores - Especificando Sintaxe Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Sintática A análise sintática agrupa os tokens em uma árvore sintática de acordo com a estrutura
Leia maisMestrado em Engenharia Física Tecnológica
16 a Aula - Funções. Programação Mestrado em Engenharia Física Tecnológica Samuel M. Eleutério sme@tecnico.ulisboa.pt Departamento de Física Instituto Superior Técnico Universidade de Lisboa Funções Funções
Leia maisCapítulo 7. Expressões e Sentenças de Atribuição
Capítulo 7 Expressões e Sentenças de Atribuição Introdução Expressões são os meios fundamentais de especificar computações em uma linguagem de programação Para entender a avaliação de expressões, é necessário
Leia mais