Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal
|
|
- Letícia Valverde Domingues
- 6 Há anos
- Visualizações:
Transcrição
1 Árvores de Sintaxe Abstracta Simão Melo de Sousa Computer Science Department University of Beira Interior, Portugal
2 Plano 1 Accções semânticas em Gramáticas Livres de Contexto Valores Semânticos em Gramáticas Descendentes Valores Semânticos em Gramáticas Ascendentes 2
3 Plano Valores Semânticos em Gramáticas Descendentes Valores Semânticos em Gramáticas Ascendentes 1 Accções semânticas em Gramáticas Livres de Contexto Valores Semânticos em Gramáticas Descendentes Valores Semânticos em Gramáticas Ascendentes 2
4 Princípios Gerais Valores Semânticos em Gramáticas Descendentes Valores Semânticos em Gramáticas Ascendentes Um compilador deve fazer mais do que simplesmente reconhecer se uma frase analisada pertence ou não a linguagem gerada pela gramática. pode/deve fazer algo com o texto reconhecido. As acções semânticas duma gramática possibilitadas por ferramentas como o yacc permitam a definição e a execução de tais operações em cada produção da gramática.
5 Princípios Gerais Valores Semânticos em Gramáticas Descendentes Valores Semânticos em Gramáticas Ascendentes Cada símbolo da gramática (terminal ou não terminal) pode ser associado a um determinado tipo de valor (semântico). Por exemplo numa gramática para a aritmética sobre inteiros, o não terminal especificando as expressões aritméticas, digamos exp, pode ser associado ao tipo inteiro. Uma expressão em particular (i.e. reconhecido por exp) terá como valor o inteiro que resulta do seu cálculo. Para uma regra A B C D, o valor semântico de A pode ser calculado a partir dos valores semânticos de B, C e D.
6 Valores Semânticos em Gramáticas Descendentes Valores Semânticos em Gramáticas Ascendentes Gramáticas LL(1) e valores semânticos em Ocaml 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 )
7 Valores Semânticos em Gramáticas Descendentes Valores Semânticos em Gramáticas Ascendentes Gramáticas LL(1) e valores semânticos em Ocaml (*val parse_expr : Genlex.token stream -> formula *) let rec parse_expr = parser (* corresponde a entrada E da gramatica *) [< e1 = parse_conj; e = parse_more_imps e1 >] -> e and parse_more_imps e1 = parser (* corresponde a entrada E da gramatica *) [< Kwd "->"; e2 = parse_conj; e = parse_more_imps (Implica(e1, e2)) >] -> e [< Kwd "<->"; e2 = parse_conj; e = parse_more_imps (Equivale(e1, e2)) >] -> e [< >] -> e1 and parse_conj = parser (* corresponde a entrada T da gramatica *) [< e1 = parse_simple; e = parse_more_conjs e1 >] -> e and parse_more_conjs e1 = parser (* corresponde a entrada T da gramatica *) [< Kwd "&"; e2 = parse_simple; e = parse_more_conjs (E(e1, e2)) >] -> e [< Kwd " "; e2 = parse_simple; e = parse_more_conjs (Ou(e1, e2)) >] -> e [< >] -> e1 and parse_simple = parser (* corresponde a entrada F da gramatica *) [< Ident s >] -> Var s [< Kwd "TRUE" >] -> Verdade [< Kwd "FALSE" >] -> Falso [< Kwd "!"; e = parse_expr >] -> Nao e [< Kwd "("; e = parse_expr; Kwd ")" >] -> e let parse_expression = parser [< e = parse_expr; _ = Stream.empty >] -> e
8 Valores Semânticos em Yacc Valores Semânticos em Gramáticas Descendentes Valores Semânticos em Gramáticas Ascendentes %{ %} %token <int> INT %token PLUS MINUS TIMES DIV EOF %left PLUS MINUS %left TIMES DIV %left uminus %start expr %type <int> expr %% expr: INT {$1} expr PLUS expr {$1 + $3} expr MINUS expr {$1 - $3} expr TIMES expr {$1 * $3} expr DIV expr {$1 / $3} MINUS expr %prec uminus {-$2} ;
9 Pilha de Valores Semânticos Valores Semânticos em Gramáticas Descendentes Valores Semânticos em Gramáticas Ascendentes Pilha de valores Input Acção ɛ $ shift 1 : INT $ reduce 1 : expr $ shift 1 : expr $ shift 1 : expr + 2 : INT 3 $ reduce 1 : expr + 2 : expr 3 $ shift 1 : expr + 2 : expr 3 $ shift 1 : expr + 2 : expr 3 : INT $ reduce 1 : expr + 2 : expr 3 : expr $ reduce 1 : expr + 6 : expr $ reduce 7 : expr $ accept
10 Valores Semânticos em Yacc Valores Semânticos em Gramáticas Descendentes Valores Semânticos em Gramáticas Ascendentes %{ type op = Soma Diff Mult Div type ast = Binop of ast*op*ast Neg of ast Val of int %} %token INT PLUS MINUS TIMES DIV EOF %left PLUS MINUS %left TIMES DIV %left uminus %start expr %type <ast> expr %% expr: INT {Val $1} expr PLUS expr {Binop ($1,Soma,$3)} expr MINUS expr {Binop ($1,Diff,$3)} expr TIMES expr {Binop ($1,Mult,$3)} expr DIV expr {Binop ($1,Div,$3)} MINUS expr %prec uminus {Neg $2} ;
11 Plano 1 Accções semânticas em Gramáticas Livres de Contexto 2
12 Princípios É possível escrever compiladores completos utilizando exclusivamente o mecanismo de acções semânticas associadas as produções. No entanto, tais compiladores são difíceis de ler e de manter. Outra ponto ao desfavor de tal arquitectura é o facto de o processo semântico ter de acompanhar a analise sintáctica (i.e. obrigação de seguir a ordem do parsing quando esta pode não ser a mais cómoda). por forma a melhorar a modularidade e a separação clara entre processo sintáctico e processo semântico é habitual deixar as acções semânticas produzirem uma estrutura de dados que codifica todo o programa analisado e que poderá ser explorada e utilizada conveniente pelas restantes fases da compilação: a árvore de sintaxe abstracta, AST.
13 Princípios Linguagens de programação modernos = programação estruturada = AST: representação estruturada de programas As AST facilitam: A verificação dos tipos; a geração de programas; a transformação, a manipulação e a optimização de programas
14 Princípios Fala-se assim de Sintaxe Concreta vs. Sintaxe Abstracta Sintaxe Concreta = Sintaxe oferecida ao programador sintaxe Abstracta = Sintaxe manipulada pelo computador
15 Princípios
16 Princípios Sintaxe concreta: 1 while b do begin i 1 ;i 2 end 2 while b do i 1 ;i 2 done 3 enquanto b fazer i 1 seguido de i 2 fim Este exemplos representam a mesma sequência de comandos, naturalmente serão traduzidos para a mesma sintaxe abstracta. Melhor ainda, as AST permitam um bom tratamento de construções sintácticas qualificadas de açúcar sintáctico. Por exemplo a estrutura cíclica repeat pode ser vista como um caso particular de while. Assim repeat i until b pode dar convenientemente a mesma AST de que i; while not b do i
17 Princípios Em Ocaml, os tipos indutivos fornecem uma forma cómoda de representar estas AST. T: sequência de X type T = X list T: Alternativamente A, B ou C type T = Ca of A Cb of B Cc of C
18 AST em Yacc %{ type op = Soma Diff Mult Div type e = Binop of e*op*e Neg of e Val of int type ast = e list %} %token INT PLUS MINUS TIMES DIV EOF DOT %left PLUS MINUS %left TIMES DIV %left uminus %start prog %type <ast> prog %% prog: /*empty*/ {[]} expr DOT prog {$1::$2} expr: INT {Val $1} expr PLUS expr {Binop ($1,Soma,$3)} expr MINUS expr {Binop ($1,Diff,$3)} expr TIMES expr {Binop ($1,Mult,$3)} expr DIV expr {Binop ($1,Div,$3)} MINUS expr %prec uminus {Neg $2} ;
19 Algumas Considerações A analise da AST pelas fases de compilação seguintes pode resultar na detecção de erros. Neste caso como assinalar esta ocorrência de forma conveniente, por exemplo indicando a localização precisa da localização. De facto o processamento da AST já não ocorre com o contacto directo do ficheiro fonte. Por isso é necessário juntar na AST toda a informação necessária a localização física das estruturas contidas na AST (ou seja do local concreto no ficheiro onde ocorrem as estruturas arquivadas na AST). O OcamlYacc disponibiliza vários mecanismos para tal processamento (ver os tipos de dados position e lexbuf do módulo Lexing).
20 Algumas Considerações (Do manual de referencia - Módulo Lexing): Note that the lexing engine will only manage the pos cnum field of lex curr p by updating it with the number of characters read since the start of the lexbuf. For the other fields to be accurate, they must be initialised before the first use of the lexbuf, and updated by the lexer actions. Da mesma forma, um dos aspectos importantes por considerar e o tipo da informação contida na AST. Esta informação irá ser calculada na fase seguinte e integrada na AST em si (decoração da AST). Como tal esta informação deve já ser contemplada na fase da definição da AST. Assim de forma geral, cada informação relevante às fases posteriores podem ser acrescentada a AST para um processamento adequado.
21 Arith - Um exemplo completo open Lexing type type_expr = Undef INT FLOAT type binop = Sum Diff Prod Quot type expr = F of float * position * position I of int * position * position Var of string * type_expr * position * position Op of binop * expr * expr * type_expr * position * position Neg of expr * type_expr * position * position Letin of string * expr * expr * type_expr * position * position type instr = Set of string * expr * position * position Print of expr * position * position Dummy type prg = instr list
22 Arith - Um exemplo completo { open Lexing (...) (* funç~ao para a visualizaç~ao de mensagens de erros léxicos *) let print_lexing_error st pos = prerr_string ("Erro Léxico em "^pp_position pos^"\n\ta sequ^encia \""^ st^"\" n~ao é autorizada\n") let kwd_tbl = ["let",let ;"in",in ;"set",set;"print",print] let id_or_kwd s = try List.assoc s kwd_tbl with _ -> IDENT(s) (* A posiç~ao exacta no ficheiro é algo da responsabilidade do utilizador.. Esta funç~ao, chamada quando é detectada um fim de linha incrementa o número de linha e actualiza o campo pos_bol. Relembramos que o único campo da responsabilidade do ocamllex é o campo pos_cnum que arquiva o número de caracteres entre o início do ficheiro e a posiç~ao actual. Assim, para calcular a posiç~ao na linha corrrente basta calcular pos_cnum - pos_bol *) let incr_pos lx = let pos = lx.lex_curr_p in lx.lex_curr_p <- {pos with pos_bol = pos.pos_cnum ; pos_lnum = pos.pos_lnum +1} } let letter = [ a - z A - Z ] let digit = [ 0-9 ] let ident = letter (letter digit _ )* let integer = digit+ let floatn = integer. integer? let space = [ \r \t ]
23 Arith - Um exemplo completo rule nexttoken = parse space+ { nexttoken lexbuf } \n { incr_pos lexbuf ; nexttoken lexbuf} ident { id_or_kwd (lexeme lexbuf) } + { PLUS } - { MINUS } * { TIMES } / { DIV } = { EQ } ( { LP } ) { RP } ; { DOT } floatn { Fl (float_of_string (lexeme lexbuf)) } integer { In (int_of_string (lexeme lexbuf)) } eof { EOF } "//" [^ \n ] { nexttoken lexbuf} "(*" { comment lexbuf ; nexttoken lexbuf } "*)" {(print_lexing_error "unbalanced comments");nexttoken lexbuf) _ {(print_lexing_error (lexeme lexbuf) lexbuf.lex_curr_p); nexttoken lexbuf} and comment = parse "(*" { comment lexbuf; comment lexbuf } "*)" { () } \n { incr_pos lexbuf ; comment lexbuf} _ { comment lexbuf } eof { print_lexing_error "unbalanced comments");nexttoken lexbuf }
24 Arith - Um exemplo completo %{ open Ast (...) let parse_error msg = prerr_string msg %} %token <int> In %token <float> Fl %token <string> IDENT %token SET LET IN PRINT EOF LP RP PLUS MINUS TIMES DIV EQ DOT %nonassoc IN %left MINUS PLUS %left TIMES DIV %nonassoc uminus %start prog %type < Ast.prg > prog
25 Arith - Um exemplo completo %% prog: instrs EOF {List.rev $1)}; instrs: instr {[$1]} instrs instr {$2::$1} instrs error {pp_syntax_error (rhs_start_pos 2) (rhs_end_pos 2);$1}; instr: SET IDENT EQ expr DOT {Set($2,$4,symbol_start_pos (), symbol_end_pos ())} PRINT expr DOT {Print($2,symbol_start_pos (), symbol_end_pos ())}; expr: Fl {F($1,symbol_start_pos (), symbol_end_pos ())} In {I($1,symbol_start_pos (), symbol_end_pos ())} IDENT {Var ($1, undef_type,symbol_start_pos (), symbol_end_pos ())} expr PLUS expr {Op(Sum,$1,$3, Undef,symbol_start_pos (), symbol_end_pos ())} expr MINUS expr {Op(Diff,$1,$3, Undef,symbol_start_pos (), symbol_end_pos ())} expr TIMES expr {Op(Prod,$1,$3, Undef,symbol_start_pos (), symbol_end_pos ())} expr DIV expr {Op(Quot,$1,$3, Undef,symbol_start_pos (), symbol_end_pos ())} MINUS expr %prec uminus {Neg ($2, Undef,symbol_start_pos (), symbol_end_pos ())} LET IDENT EQ expr IN expr {Letin($2,$4,$6, Undef,symbol_start_pos (), symbol_end_pos ())} LP expr RP {$2};
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 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 maisCompiladores - 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 maisSimão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal
Análise Sintáctica Simão Melo de Sousa Computer Science Department University of Beira Interior, Portugal Plano 1 2 3 4 Eliminar a Recursividade Esquerda Factorizar a Esquerda Plano 1 2 3 4 Alvo? Lembrete
Leia maisSintaxe e Semântica. George Darmiton da Cunha Cavalcanti.
Sintaxe e Semântica George Darmiton da Cunha Cavalcanti (gdcc@cin.ufpe.br) Tópicos Introdução O problema de descrever a sintaxe Métodos formais para descrever a sintaxe Gramáticas de atributos Descrevendo
Leia maisCompiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 12. Instituto de C
ompiladores Análise Sintática Bruno Lopes Bruno Lopes ompiladores 1 / 12 Front-end Lida com a linguagem de entrada Teste de pertinência: código fonte linguagem fonte? Programa está bem formado? Sintaticamente?
Leia 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 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 maisTrabalho 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 maisAnalise Semântica. Simão Melo de Sousa
Analise Semântica Simão Melo de Sousa RELEASE - RELiablE And SEcure Computation Group Computer Science Department University of Beira Interior, Portugal desousa@di.ubi.pt http://www.di.ubi.pt/ desousa/
Leia maisCompiladores. Introdução
Compiladores Introdução Apresentação Turma Noite Continuada I 20/03 Continuada II 22/05 Atividades Regimental 05/06 Total 1 Ponto 1 Ponto 1 Ponto 7 Pontos 10 Pontos Aulas expositivas teórico-práticas Exercícios
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 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 maisAná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 maisUniversidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação
Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação Análise Semântica Disciplina: Compiladores Equipe: Luiz Carlos dos Anjos Filho José Ferreira Júnior Compiladores Um compilador
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 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 I Prof. Ricardo Santos (cap 1)
Compiladores I Prof. Ricardo Santos (cap 1) Compiladores Linguagens de programação são notações que permitem descrever como programas devem executar em uma máquina Mas, antes do programa executar, deve
Leia maisApresentaçã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 maisCompiladores. Análise Léxica
Compiladores Análise Léxica Regras Léxicas Especificam o conjunto de caracteres que constituem o alfabeto da linguagem, bem como a maneira que eles podem ser combinados; Exemplo Pascal: letras maiúsculas
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 maisMétodos de Programação I (2005/2006) 1. Ficheiro (file)
Métodos de Programação I (2005/2006) 1 Ficheiro (file) O tipo estruturado file representa, em Pascal, uma estrutura de dados capaz de armazenar dados ou resultados de qualquer outro tipo É uma estrutura
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) Análise Léxica A primeira fase da compilação Recebe os caracteres de entrada do programa e os converte em um fluxo de
Leia maisCompilação: Erros. Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão. * Analisadores Botton-Up: - Shift-Reduce (SLR)
Compilação: Erros Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão * Analisadores Botton-Up: - Shift-Reduce (SLR) * Erros no Lex * Erros no Yacc * Erros na Definição da
Leia maisImplementação de Linguagens
Implementação de Linguagens Pedro Vasconcelos DCC/FCUP 11 de Abril de 2016 Objectivos Introdução à implementação de linguagens de programação funcionais. Enfoce sobre técnicas de interpretação/compilação
Leia maisConceitos de Linguagens de Programação
Conceitos de Linguagens de Programação Aula 04 Sintaxe e Semântica Edirlei Soares de Lima Sintaxe e Semântica A descrição de uma linguagem de programação envolve dois aspectos principais:
Leia 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 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 maisCompilador JSLlight 1 ra Parte: Analisadores léxico e sintactico
Compilador JSLlight 1 ra Parte: Analisadores léxico e sintactico Simão Melo de Sousa Departamento de Informática Universidade da Beira Interior Ano lectivo 2003/2004 A linguagem que vamos considerar neste
Leia maisFolha 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 maisLinguagens de Programação Aula 4
Aula 4 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada... Autômatos finitos AF:exemplos... Cadeia de caracteres a,b,c 2/82 Na aula passada... Autômatos finitos AF:exemplos... Números inteiros(com
Leia maisCompiladores 02 Analise léxica
Compiladores 02 Analise léxica Sumário Análise Léxica Definição: Lexema, tokens Tabela símbolos Expressões regulares, automatos Relembrando O compilador é dividido em duas etapas Análise Síntese Análise
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 maisCompiladores Aula 1. Celso Olivete Júnior.
Aula 1 Celso Olivete Júnior olivete@fct.unesp.br 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
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 maisFACULDADE LEÃO SAMPAIO
FACULDADE LEÃO SAMPAIO Paradigmas de Programação Curso de Análise e Desenvolvimento de Sistemas Turma: 309-5 Semestre - 2014.2 Paradigmas de Programação Prof. MSc. Isaac Bezerra de Oliveira. 1 PARADIGMAS
Leia maisCompiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores
Motivação Prof. Sérgio Faustino Compiladores Conhecimento das estruturas e algoritmos usados na implementação de linguagens: noções importantes sobre uso de memória, eficiência, etc. Aplicabilidade freqüente
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 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 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 maisIntrodução à programação em PASCAL. Aula de 22/10/2001. Nota: Conjunto de slides baseados nas transparências utilizadas em PEDA em anos anteriores
Introdução à programação em PASCAL Aula de 22/10/2001 Nota: Conjunto de slides baseados nas transparências utilizadas em PEDA em anos anteriores Conteúdo Conceito de linguagem de programação O processo
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 maisLFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.
LFA Aula 09 Gramáticas e Linguagens Livres de Contexto (Hopcroft, 2002) 18/01/2016 Celso Olivete Júnior olivete@fct.unesp.br www.fct.unesp.br/docentes/dmec/olivete/lfa 1 Classes Gramaticais Linguagens
Leia maisTÉCNICO DE INFORMÁTICA - SISTEMAS
782 - Programação em C/C++ - estrutura básica e conceitos fundamentais Linguagens de programação Linguagem de programação são conjuntos de palavras formais, utilizadas na escrita de programas, para enunciar
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 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 maisLaboratório!de!Linguagens!de!Programação! Prof.!Andrei!Rimsa!Álvares! Trabalho(Prático(I(
LaboratóriodeLinguagensdeProgramação Prof.AndreiRimsaÁlvares Trabalho(Prático(I( 1.(Objetivo( O objetivo desse trabalho é desenvolver um interpretador para uma linguagem de programação fictícia chamada
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. Conceitos Básicos
Compiladores Conceitos Básicos Processadores de Linguagem De forma simples, um compilador é um programa que recebe como entrada um programa em uma linguagem de programação a linguagem fonte e o traduz
Leia maisGramáticas LR. Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal
Gramáticas LR Simão Melo de Sousa Computer Science Department University of Beira Interior, Portugal Plano Princípios Gerais 1 Princípios Gerais Considerações sobre as Gramáticas Livres de Contexto Motivação
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 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 maisProjeto de Compiladores
Projeto de Compiladores FIR Faculdade Integrada do Recife João Ferreira 26 e 27 de fevereiro de 2007 Agenda da Aula Revisão Linguagem de Programação Tradutores Compilador As Fases de Um Compilador Linguagem
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 1 - Introdução Prof. Márcio Delamaro delamaro@icmc.usp.br Como construir um
Leia maisAnálise Sintática. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 18
Análise Sintática Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Outubro, 2016 1 / 18 Sumário 1 Introdução 2 Derivações 2 / 18 1 Introdução 2 Derivações 3 /
Leia maisIdentificadores Nome de variáveis, constantes, métodos, etc...
IV.2 Aspectos Léxicos Convencionais Classes de símbolos Genéricos Token genérico / Lei de formação bem definida Podem possuir limitações de tamanho e/ou valor Possuem valor semântico o token deve ser acompanhado
Leia maisLinguagem Pascal. Prof. Sérgio Rodrigues. É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa;
Linguagem Pascal Prof. Sérgio Rodrigues Introdução Algoritmo É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa; Programa é a formalização de um algoritmo
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 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 maisUniversidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores
Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores 2013-2 Compilador para a Linguagem Cafezinho Especificação dos trabalhos: T2 (Geração da Representação Intermediária e Análise
Leia maisConceitos básicos de programação
Para aprender uma linguagem de programação podemos começar por conhecer os vocábulos ou símbolos que formam o seu léxico e depois aprender como esses vocábulos integram as instruções (frases) que compõe
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 maisTeoria da Computação Exemplo de relatório para o trabalho n o 2
Teoria da Computação Exemplo de relatório para o trabalho n o Simão Melo de Sousa Ano lectivo 003/004 1 Primeiro exercício Demonstre no sistema Coq as fórmulas lógicas: 1. A, B Prop. A (A B). A, B Prop.
Leia maisCompiladores. Análise Léxica
Compiladores Análise Léxica Cristiano Lehrer, M.Sc. Introdução (1/3) Análise léxica é a primeira fase do compilador. A função do analisador léxico, também denominado scanner, é: Fazer a leitura do programa
Leia 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 maisFunção, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros. Prof. Thiago A. S.
Análise léxica Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros Prof. Thiago A. S. Pardo 1 Estrutura geral de um compilador programa-fonte analisador
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 maisUma introdução ao GAP
Uma introdução ao GAP O nome GAP, advém de Groups, Algorithms and Programming. Trata-se de um sistema computacional inicialmente concebido para trabalhar na área da álgebra. Álgebra (Curso de CC) Ano lectivo
Leia maisTokens, Padroes e Lexemas
O Papel do Analisador Lexico A analise lexica e a primeira fase de um compilador e tem por objetivo fazer a leitura do programa fonte, caracter a caracter, e traduzi-lo para uma sequencia de símbolos lexicos
Leia maisCurso Profissional de Gestão e Programação de Sistemas Informáticos. Programação e Sistemas de Informação. Módulo 1. 3ª Parte Prof. Sandra Pais Soares
Curso Profissional de Gestão e Programação de Sistemas Informáticos Programação e Sistemas de Informação Módulo 1 3ª Parte Prof. Sandra Pais Soares Fundamentos de Programação 1. Palavras Reservadas 2.
Leia mais13 a Aula - Instruções Condicionais. Ciclos. Pré-processador. Variáveis de ambiente. Mestrado em Engenharia Física Tecnológica
13 a Aula - Instruções Condicionais. Ciclos. Pré-processador. Variáveis de ambiente. Programação Mestrado em Engenharia Física Tecnológica Samuel M. Eleutério sme@tecnico.ulisboa.pt Departamento de Física
Leia maisTestes em Haskell com a framework HUnit 1.0
Teste de programas em Haskell com a framework HUnit 1.0 Pedro Strecht Mestrado em Engenharia Informática 3 de Maio de 2005 1 Testes em Haskell com HUnit 1.0 Breve introdução à linguagem Haskell Apresentação
Leia maisCompiladores Ficha de exercícios práticos
Compiladores Ficha de exercícios práticos Simão Melo de Sousa Exercício 1 O objectivo deste exercício é a familiarização ao conceito de análise léxica. Assim pretende-se que implementa em OCaml um lexer
Leia maisConstrução de um compilador para a linguagem Panda
Construção de Compiladores I UFOP DECOM 2014 1 Atividades Práticas Construção de um compilador para a linguagem Panda Etapa 1 Sumário José Romildo Malaquias Resumo Nesta série de atividades vamos implementar
Leia maisAná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 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 maisLinguagem de programação: Pascal
Aula 04 Linguagem de programação: Pascal Prof. Tecgº Flávio Murilo 26/03/2013 1 Pascal Introdução Pascal é uma linguagem de programação estruturada, criada em 1970 pelo suíço Niklaus Wirth, dando este
Leia maisParadigmas de Linguagens de Programação. Descrevendo a Sintaxe e a Semântica
Descrevendo a Sintaxe e a Semântica Cristiano Lehrer Introdução Descrição, compreensível, de uma linguagem de programação é difícil e essencial. Capacidade de determinar como as expressões, instruções
Leia maisVantagens 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 maisExercícios para Fundamentos da Programação
Exercícios para Fundamentos da Programação Fausto Almeida, Cláudia Antunes, Ana Cardoso-Cachopo, Pedro Amaro de Matos, Francisco Saraiva de Melo Departamento de Engenharia Informática Instituto Superior
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 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 Erros Uma falha em um parser de combinadores tem dois significados: A alternativa que
Leia maisTratamento dos Erros de Sintaxe. Adriano Maranhão
Tratamento dos Erros de Sintaxe Adriano Maranhão Introdução Se um compilador tivesse que processar somente programas corretos, seu projeto e sua implementação seriam grandemente simplificados. Mas os programadores
Leia maisSintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida)
Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida) Não-terminais são nomes mnemônicos colocados entre parênteses angulares. Vocabulário terminal formado por
Leia maisFundamentos da Programação
Fundamentos da Programação Solução da Repescagem do Primeiro Teste 31 de Janeiro de 2013 09:00 10:30 1. De um modo sucinto, (a) (0.5) Diga o que é um processo computacional. Um processo computacional é
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 maisAná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 maisProgramação: Vetores
Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia
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 maisImplementação de Linguagens
Implementação de Linguagens Pedro Vasconcelos DCC/FCUP 21 de Março de 2011 Objectivos Introdução à implementação de linguagens de programação declarativas (funcionais e lógicas). Enfoce sobre técnicas
Leia maisPortugol. Tiago Alves de Oliveira
Portugol Tiago Alves de Oliveira Revisando Algoritmo: Sequência finita de passos que levam à execução de uma tarefa Claro e preciso. Ex. somar dois números Algoritmo precisa seguir uma sequência lógica
Leia maisPró-Reitoria Acadêmica Diretoria Acadêmica Assessoria Pedagógica da Diretoria Acadêmica
FACULDADE: CENTRO UNIVERSITÁRIO DE BRASÍLIA UniCEUB CURSO: CIÊNCIA DA COMPUTAÇÃO DISCIPLINA: CONSTRUÇÃO DE COMPILADORES CARGA HORÁRIA: 75 H. A. ANO/SEMESTRE: 2017/02 PROFESSOR: EDUARDO FERREIRA DOS SANTOS
Leia maisUnidade VI. Técnicas de Teste de Software Teste Estrutural. Profa. Dra. Sandra Fabbri
Unidade VI Técnicas de Teste de Software Profa. Dra. Sandra Fabbri Os requisitos de teste são extraídos de uma implementação em particular Teste dos detalhes procedimentais A maioria dos critérios dessa
Leia maisAulas Anteriores. Detalhes da linguagem de programação
Aulas Anteriores Detalhes da linguagem de programação Elementos básicos (identificadores, constantes, símbolos gráficos) Estrutura básica de um programa (cabeçalho, parte declarativa, parte de execução)
Leia maisIV.2 Aspectos Léxicos Convencionais
IV.2 Aspectos Léxicos Convencionais Classes de símbolos Genéricos - Token genérico / Lei de formação bem definida - Limitações de tamanho e/ou valor - Possuem valor semântico o token deve ser acompanhado
Leia maisLinguagens de Programação Aula 3
Aula 3 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada... Classificação das LPs (nível, geração e paradigma) Paradigmas Imperativo, OO, funcional, lógico e concorrente 2/33 Na aula de hoje...
Leia maisTradução dirigida por sintaxe
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 efinições dirigidas por sintaxe Gramática
Leia maisTE091 Programação Orientada a Objetos Engenharia Elétrica
TE091 Programação Orientada a Objetos Engenharia Elétrica Revisão Rápida de Programação em C Prof. Carlos Marcelo Pedroso 2015 Revisão Linguagem C Características principais Modularidade: uso de procedimentos
Leia mais