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

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

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

Transcrição

1 Á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 Compiladores Ficha de exercícios práticos Simão Melo de Sousa Ano lectivo 2004/2005 O objectivo desta ficha é a implementação dos pequenos programas ou funções sugeridos pelo enunciado dos exercícios seguintes.

Leia mais

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

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

Leia mais

Compiladores - JACC. Fabio Mascarenhas

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

Leia mais

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

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

Leia mais

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

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

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

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

Leia mais

Análise Sintática - Final

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

Leia mais

Conceitos de Linguagens de Programação

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

Leia mais

Trabalho de Linguagens Formais e Compilação

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

Leia mais

Analise Semântica. Simão Melo de Sousa

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

Compiladores. Introdução

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

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

Compilação da linguagem Panda

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

Leia mais

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

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

Leia mais

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação

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

Introdução à Programação

Introduçã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 mais

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

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

Leia mais

Compiladores I Prof. Ricardo Santos (cap 1)

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

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

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

Leia mais

Compiladores. Análise Léxica

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

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

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

Métodos de Programação I (2005/2006) 1. Ficheiro (file)

Mé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 mais

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

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

Leia mais

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

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

Leia mais

Implementação de Linguagens

Implementaçã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 mais

Conceitos de Linguagens de Programação

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

Leia mais

Compiladores Análise Semântica

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

Compiladores Análise Semântica

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

Compilador JSLlight 1 ra Parte: Analisadores léxico e sintactico

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

Folha 4.1 Análise sintática descendente

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

Leia mais

Linguagens de Programação Aula 4

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

Leia mais

Compiladores 02 Analise léxica

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

Compiladores. Lex e Yacc / Flex e Bison. Ferramentas Flex/Bison

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

Compiladores Aula 1. Celso Olivete Júnior.

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

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

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

FACULDADE LEÃO SAMPAIO

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

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

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

Análise Sintática Bottom-up

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

Leia mais

Familiarização com a ferramenta JavaCC

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

Leia mais

Revisão. Fases da dacompilação

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

Leia mais

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

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

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

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

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

Leia mais

TÉCNICO DE INFORMÁTICA - SISTEMAS

TÉ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 mais

I LINGUAGENS E PROCESSADORES: INTRODUÇÃO 1

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

Leia mais

CAP. VI ANÁLISE SEMÂNTICA

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

Laboratório!de!Linguagens!de!Programação! Prof.!Andrei!Rimsa!Álvares! Trabalho(Prático(I(

Laborató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 mais

Linguagens de Domínio Específico

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

Leia mais

Compiladores. Conceitos Básicos

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

Gramá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 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 mais

Compiladores. Fabio Mascarenhas

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

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

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

Leia mais

Projeto de Compiladores

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

Como construir um compilador utilizando ferramentas Java

Como construir um compilador utilizando ferramentas Java Como construir um compilador utilizando ferramentas Java p. 1/2 Como construir um compilador utilizando ferramentas Java Aula 1 - Introdução Prof. Márcio Delamaro delamaro@icmc.usp.br Como construir um

Leia mais

Aná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. 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 mais

Identificadores Nome de variáveis, constantes, métodos, etc...

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

Linguagem 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. É 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 mais

Análise Sintática Introdução

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

Leia mais

V.2 Especificação Sintática de Linguagens de Programação

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

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

Conceitos básicos de programação

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

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

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

Leia mais

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

Compiladores. Análise Léxica

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

Leia mais

Compiladores - Análise LL(1)

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

Leia mais

Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros. Prof. Thiago A. S.

Funçã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 mais

Compiladores - Análise LL(1)

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

Leia mais

Uma introdução ao GAP

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

Tokens, Padroes e Lexemas

Tokens, 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 mais

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

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

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

Testes em Haskell com a framework HUnit 1.0

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

Compiladores Ficha de exercícios práticos

Compiladores Ficha de exercícios práticos Compiladores Ficha de exercícios práticos Simão Melo de Sousa 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 mais

Construção de um compilador para a linguagem Panda

Construçã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 mais

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

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

Leia mais

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

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

Leia mais

Linguagem de programação: Pascal

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

Paradigmas de Linguagens de Programação. Descrevendo a Sintaxe e a Semântica

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

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

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

Leia mais

Exercícios para Fundamentos da Programação

Exercí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 mais

Compiladores - Especificando Sintaxe

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

Leia mais

Linguagens de Domínio Específico

Linguagens de Domínio Específico Linguagens de Domínio Específico Fabio Mascarenhas 2016.1 http://www.dcc.ufrj.br/~fabiom/dsl Processamento de uma DSL Erros Uma falha em um parser de combinadores tem dois significados: A alternativa que

Leia mais

Tratamento dos Erros de Sintaxe. Adriano Maranhão

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

Sintaxe 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) 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 mais

Fundamentos da Programação

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

Introdução. Compiladores Análise Semântica. Introdução. Introdução. Introdução. Introdução 11/3/2008

Introduçã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 mais

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

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

Leia mais

Programação: Vetores

Programaçã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 mais

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

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

Leia mais

Implementação de Linguagens

Implementaçã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 mais

Portugol. Tiago Alves de Oliveira

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

Pró-Reitoria Acadêmica Diretoria Acadêmica Assessoria Pedagógica da Diretoria Acadêmica

Pró-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 mais

Unidade VI. Técnicas de Teste de Software Teste Estrutural. Profa. Dra. Sandra Fabbri

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

Aulas Anteriores. Detalhes da linguagem de programação

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

IV.2 Aspectos Léxicos Convencionais

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

Linguagens de Programação Aula 3

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

Tradução dirigida por sintaxe

Traduçã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 mais

TE091 Programação Orientada a Objetos Engenharia Elétrica

TE091 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