Semântica Denotacional Adaptação de A Practical Introduction to Denotational Semantics Por Lloyd Allison Cambridge University Press, 1986

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

Download "Semântica Denotacional Adaptação de A Practical Introduction to Denotational Semantics Por Lloyd Allison Cambridge University Press, 1986"

Transcrição

1 1- Introdução Semântica Denotacional Adaptação de A Practical Introduction to Denotational Semantics Por Lloyd Allison Cambridge University Press, 1986 Semântica denotacional é um método formal para definir a semântica de linguagens de programação. Ela é do interesse do projetista de linguagens, quem escreve compiladores e programadores. Estes indivíduos têm critérios diferentes para julgar um método ele deve ser conciso, não ambíguo, aberto à análise matemática, verificável mecanicamente, executável e legível dependendo do seu ponto de vista. A semântica denotacional não pode ser todas as coisas para todas as pessoas, mas é uma tentativa de satisfazer a estes objetivos diversos. É um método formal pois é baseado em fundamentos matemáticos bem entendidos e usa uma notação rigorosamente definida (meta-linguagem). A completa definição de uma linguagem de programação é dividida em sintaxe, semântica e algumas vezes, pragmática. Sintaxe define a estrutura das sentenças legais na linguagem. A semântica dá o significado dessas sentenças. A pragmática cobre o uso de uma implementação de uma linguagem e não será mais mencionada neste curso. No caso da sintaxe, gramáticas livre de contexto expressas em BNF ou em diagramas de sintaxe têm sido de grande benefício para cientistas da computação desde que Backus e Naur especificaram formalmente a sintaxe de Algol-60. Atualmente, todas as linguagens de programação têm suas sintaxes dadas desta forma. O resultado foi uma sintaxe mais limpa, melhores métodos de parsing, geradores de parsers e melhores manuais de linguagem. Até hoje, nenhum formalismo semântico atingiu tal popularidade e a semântica de novas linguagens são invariavelmente dadas em linguagem natural. O problema típico que o programador enfrenta é escrever um programa que irá transformar dados satisfazendo algumas propriedades ou asserções P em resultados satisfazendo Q. {P} programa {Q} A linguagens das asserções é a lógica de predicados. Esta formulação trata um programa como um transformador de predicados. Se concentrarmos nos predicados em uma transformação somos levados ao estilo axiomático de semântica. Isto foi sugerido por Floyd e formalizado por Hoare, Dijkstra e vários outros. O método é legível e muito útil para programadores e projetistas de algoritmos. Ele está intimamente conectado com a disciplina de programação estruturada. Ele apresenta algumas dificuldades (não insuperáveis) na definição de algumas características das linguagens de programação, especialmente gotos e efeitos colaterais em expressões. Há uma debate acalorado se esta é uma limitação do método ou uma indicação Impresso em 18/04/05 às 16:32 Página 1 de 10

2 que estas características são difíceis de serem usadas e perigosas. Observe que o interesse em lógica de predicados criou a linguagem de programação Prolog. Se concentrarmos no programa como uma função mapeando entradas que satisfazem a P em resultados que satisfazem a Q somos levados às semânticas operacionais e denotacionais. Semântica operacional imagina um programa rodando em uma máquina abstrata. A máquina pode ser complemente diferente de qualquer computador real, tanto de baixo nível, simples e fácil de analisar como de alto nível com uma tradução fácil a partir da linguagem de programação. A máquina e a tradução devem ser especificadas. Tal definição é mais útil para um projetista de compilador se a máquina abstrata está próxima da máquina real. A semântica denotacional reconhece a sutil diferença entre uma função um conjunto de pares ordenados possivelmente infinito {<entrada i, saida i >}- e um algoritmo como uma descrição finita de uma função. Um programa é o algoritmo escrito em uma linguagem particular de programação. Um programa define, ou denota, uma função. Uma semântica denotacional de uma linguagem dá o mapeamento de programas na linguagem para a função denotada. Exemplo: Fatorial = {<0,1>,<1,1>,<2,2>,<3,6>,<4,24>,...} Fat = if n =0 then 1 else n * fat(n-1) Uma boa semântica deve confirmar que o programa denota a função fatorial. Semântica denotacional é escrita em λ-notação que é o cálculo λ de Church com tipos de dados. Ela possui uma teoria matemática bem desenvolvida e fundamentos que foram completamente investigados. O método é conciso e poderoso o suficiente para descrever as características das linguagens de programação atuais. Definições formais só são legíveis com prática, sendo a notação equivalente a uma linguagem de programação poderosa mas difícil de ler. É mais adequada ao projetista e implementador de uma linguagem de programação que ao programador. Uma vantagem da semântica denotacional é que ela pode ser mecanizada. Mosses desenvolveu um interpretador para semântica denotacional que permite que uma definição seja executada. Algumas linguagens funcionais tais como ML são muito próximas da notação λ com tipo, e podem ser usadas para escrever e executar definições denotacionais. Parece que uma definição axiomática e uma definição denotacional são bons parceiros. A primeira para o programador e a última para o projetista de linguagem. Por exemplo, a semântica de Montagne tenta dar um estilo de semântica denotacional para um subconjunto de inglês. Lógicos estão preocupados com os objetos que substantivos, variáveis e predicados significam e com qual é o significado de uma afirmação ser verdadeira. Impresso em 18/04/05 às 16:32 Página 2 de 10

3 1.1 Um exemplo Para dar um sabor de semântica denotacional, o exemplo clássico de números decimais é apresentado. Os números decimais formam uma linguagem, Num, sobre o alfabeto {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. Ela pode ser definida pela gramática ν ::= ν δ δ δ::= O símbolo ::= pode ser lido como é ou pode ser substituído por. O pode ser lido como ou. Um dígito δ é um 0, ou um 1, ou um 2, e assim por diante. Um numeral é simples dígito ou um numeral seguido de um dígito. As letras gregas ν e δ são variáveis sintáticas sobre partes da linguagem Num. Os números decimais são normalmente tomados por significarem, ou denotarem, inteiros que são objetos abstratos. Esta interpretação convencional pode ser feita formalmente pela definição de uma função de valoração V: V: Num Int V [ν δ] = 10 x V[ν] + V[δ] V[0] =0 V[1] =1 V[2] =3 V[3] =3 V[4] =4 V[5] =5 V[6] =6 V[7] =7 V[8] =8 V[9] =9 V é uma função das sentenças da linguagem Num para os inteiros Int. V é definido por uma análise caso a caso das alternativas da gramática para Num. Elementos da linguagem estão dentro de chaves para distingui-los da meta linguagem fora. Dentro das chaves estão seqüências de caracteres (strings). Os inteiros fora das chaves estão em itálico. 7 é um caracter que denota o inteiro 7. É impossível escrever alguma coisa sem que usar nomes e consequentemente, somos obrigados a adotar alguma convenção. O valor que um numeral em particular pode agora ser calculado: V[123] = 10 x V[12] + 3 = 10 x (10x V[1]+2)+3 = 123 Isto pode disparar a pergunta e daí? Não é óbvio?. A resposta é que devemos estar satisfeitos pela definição formal concordar com a intuição em casos simples. Esta é uma característica de boas teorias. O formalismo é necessário quando a intuição não é forte o suficiente. O leitor que não percebe que 7 = 7 não apenas não é verdadeiro mas é um erro em Pascal, pode ter perdido o sentido. Note que V capturou a essência da notação posicional, e que V[123] = V[0123] e assim por diante. Impresso em 18/04/05 às 16:32 Página 3 de 10

4 A definição de V pose se usada para projetar um trecho de código que existe na maioria dos compiladores: If ch in [ ] then Begin n:= ord(ch) ord( 0 ); Ch:= nextch {retorna o próximo char e avança a entrada} While ch in [ ] do Begin n:= n*10 + ord[ch()- ord( 0 ); Ch := nextch; End End Numerais que ocorrem em um programa devem ter seus valores calculados pelo compilador. Exercício: 1) Se a definição de V é alterada para V [ν δ] = - 10 x V[ν] + V[δ] Quais são as novas características de V? Qual vantagem esta nova interpretação de Num tem? 2- Fundamentos Básicos Esta seção introduz a notação básica para sintaxe e semântica por exemplos. Desta forma, algumas idéias são usadas antes de sua (adequada) definição; no entanto, o que está acontecendo deve ser intuitivamente claro. 2.1 Sintaxe abtrata É comum fazermos distinção entre sintaxe abstrata e sintaxe concreta de uma linguagem de programação. A sintaxe concreta define a forma como a linguagem é efetivamente escrita em papel, ou na tela e inclui informação suficiente para fazer o parse. A sintaxe abstrata especifica as relações partes lógicas da linguagem. Consequentemente, pode ser mais simples e pode não conter informação suficiente para fazer o parse da linguagem sem ambiguidade. A semântica denotacional é normalmente baseada na sintaxe abstrata mais simples e mais fundamental, embora não isto não seja essencial. Como um exemplo, um comando if pode ter a seguinte sintaxe concreta: γ::= if ε then γ else γ fi mas a sintaxe abstrata pode ser dada como γ::= if ε then γ else γ Impresso em 18/04/05 às 16:32 Página 4 de 10

5 ou mesmo γ::= ε γ, γ que dá ênfase nos componentes essenciais que são uma expressão de controle e dois subcomandos (γ é a variável sintática para comando). A sintaxe concreta de uma expressão pode ser : ε ::= ε + τ τ τ ::= τ x ψ ψ ψ ::= (ε) a b c... Isto especifica que a + b x c deve ser parsed como a + (b x c) e não como (a + b) x c. A seqüência de regras dá aos operadores +, x e ( ) em ordem crescente de prioridade ou de força de ligação. Esta informação pode ser perdida na sintaxe abstrata Exp: ε ::= ε + ε ε x ε a b c... que especifica apenas a informação crucial que uma expressão é ou um operando ou um operador aplicado a duas sub-expressões. Esta é uma gramática ambígua e permitiria a + b x C ser parsed das duas formas se usada para este propósito. Os parênteses ( ) não precisam aparecer já que servem apenas para controlar o parsing. No nível prático, sintaxe concreta pode ser usada para codificar um parser descendenterecursivo. Procedure Exp; Procedure term; Procedure opd; Begin {opd} If ch = ( Then begin{sub-exp} Insymbol {sy obtem prox símbolo} Exp; Check([ ) ]) {chama insymbol de sy está no conjunto, senão erro} end else check ([ a.. z ]) end; begin {term} opd; while ch = x do begin insymbol; opd; end; begin {exp} term; Impresso em 18/04/05 às 16:32 Página 5 de 10

6 end; while ch = + do begin insymbol; term; end; A sintaxe abstrata pode definir a estrutura de dados, ou árvore de parse, que pode ser produzida por um parser Type expntype = (opd, plus, times); Xpn = node; Node = record cast t: expntype of Opd: (id:ch); Plus, times: (left, right:expn) End; Definições semânticas são geralmente baseadas em sintaxe abstrata. Assume-se que em algum lugar a sintaxe concreta existe e que um parser pode analisar os programas corretamente. O resultado do parser corresponde a sintaxe abstrata e as definições denotacionais são dadas em termos dele. 2.2 Execução seqüencial É óbvio que numerais sensatamente correspondem a números. Os objetos que programadores denotam são mais complexos. É comum pensar um programa como transformando um estado a cada atribuição. Um estado define os valores correntes dos identificadores de variáveis no programa S = Ide Valor Os estados, S, são o conjunto do tipo de dados de funções para identificadores, Ide, para Valor. Um estado particular σ :S é uma função particular de variáveis para valores. Os dois pontos : indicam que σ está no tipo de dados S. Suponha σ [x] = 6 e σ [y]=9 então abusando da notação axiomática, poderíamos escrever: {σ}x := x + 1 {σ } onde σ [x] = 7, σ [y] = 9. (todos os predicados válidos antes da atribuição podem ser inferidos de σ e todos que são válidos depois podem ser inferidos de σ ) Impresso em 18/04/05 às 16:32 Página 6 de 10

7 Um comando denota uma transformação de estado em S S A função de valoração para comandos, C, mapeia comandos sobre transformações de estado: C: Cmd (S S) é definido como associando à direita, consequentemente é normalmente escrito C: Cmd S S Um comando, γ:cmd, denota a transformação de estados C[γ]: S S Dado o exemplo acima, C[x := x + 1] σ = σ Note que parênteses, por exemplo em volta de σ, são omitidos sempre que possível, e que aplicação de função é associativa à esquerda. F x y (f(x))(y) Uma característica central, na verdade uma das principais características de um grande número de linguagens de programação incluindo Basic, Cobol, Fortran e Pascal é a execução seqüencial. Um programa é rodado pela execução do primeiro comando em seguida o segundo comando e assim por diante (assumindo a inexistência de desvios). Todas estas linguagens contêm seqüências de comandos. A sintaxe abstrata a seguir define isto, embora seja próxima de Pascal. CMD γ ::= γ; γ... O ; em Pascal pode ser lido como e então. Execute comando um e então execute comando dois. Um comando da forma γ 1 ; γ 2 denota transformação de estado C[γ 2 ] ο C[γ 1 ] Onde ο é composição funcional. Note a ordem; (f οg)(x) = f(g(x)). Exemplo: dado σ [x] =6 e σ [y]=9 C[x:=x+1; y := x] σ = C[y:=x] οc[x:=x+1] σ = C[y:=x] σ = σ Impresso em 18/04/05 às 16:32 Página 7 de 10

8 onde σ [x] = σ [y] = 7. Para estendermos a sintaxe abstrata para incluir comandos compostos adicione: CMD γ ::= begin γ end γ; γ... C[begin γ end] = C[γ ] Usando o fato da composição funcional ser associativa, os três esquemas de programa a seguir podem ser mostrado equivalentes: (1) γ 1 ; γ 2; γ 3 (2) begin γ 1 ; γ 2 end; ; γ 3 (3) γ 1; begin γ 2 ; γ 3 end Isto vai de acordo com a intuição e aumenta a confiança de que a definição de C é correta. A definição da função de valoração C pode ser dada em muitas notações. Ela não pode ser traduzida diretamente em Pascal padrão por razões não cobertas aqui, mas o trecho seguinte é muito próximo: Function C(g: cmd; s: state): State;... case g.tag of semicolon: C := C(g.right, C(g.left, s))... end O segundo comando, g.right, é aplicado ao resultado do primeiro comando g.left. 2.3 Expressões A classe de expressões em uma linguagem de programação varia de linguagem para linguagem mas deve incluir palo menos expressões lógicas (booleanas) para comandos de controle. Exp: ε ::= ε and ε ε or ε not ε true false ξ Ide: ξ ::= sintaxe para identificadores E: Exp S Bool E[ε and ε ]σ = E[ε]σ ^ E[ε ]σ Impresso em 18/04/05 às 16:32 Página 8 de 10

9 E[ε or ε ]σ = E[ε]s v E[ε ]σ E[not ε]σ = ~E[ε] E[true]σ = true E[false]σ = false E[ξ]σ = σ[ξ] O valor denotado por uma expressão depende do estado uma vez que pode conter variávies. E mapeia uma expressão sobre uma função de estados para valores, aqui apenas valores lógicos (booleanos). Para uma expressão em particular, e, E[e]: S Bool é uma função de S par Bool, E[e]s:Bool. Esta definição de E assuma que espressões não têm efeito colateral que podem alterar o estado. 2.4 Comandos de controle Um comando if pode ser acrescentado à sintaxe de comandos por: Cmd: γ ::= if ε then γ else γ... Sua semântica é dada por C[if ε then γ else γ ]σ = = Χ[γ]σ if E[e]σ=true = Χ[γ ]σ caso contrário Uma funão especial Cond é definida Cond: (S S) 2 Bool (S S) Cond (p,q)true = p Cont (p,q)false = q Cond pega duas transformações de estados p e q e produz uma função de uma chave lógica para uma transformação de estado. Se a chave for truecond pega a primeira transformação, caso contrário a segunda. C[if e the g else g ]σ = cond(c[γ], C[γ ])(E[ε]σ)s Vale a pena examinar isto para ter certeza que todos os tipos estão corretos C: Cmd S S C[if...]: S S C[if...]σ: S Cond(C[γ], C[γ ]):Bool S S E[ε]: S Bool Impresso em 18/04/05 às 16:32 Página 9 de 10

10 E[ε]σ: Bool Cond(...)(E[ε]σ): S S Cond(...)(E[ε]σ)s: S A equação usando Cond é muito difícil de ler e é frequentemente escrita na forma infixa que é mais conveniente: C[if ε then γ else γ ]σ = (if E[ε]σ then C[γ] else C[γ ])s Observe que o if dentro de [] é parte da linguagem sendo definida e o if fora é parte da meta-linguagem. Note que importante que a definição não seja dada como Cond(C[γ]σ, C[γ ]σ)(e[e]σ) Ou If E [ε]σ then C[γ]σ else C[γ ]σ Esta definição (errada) implica que os dois comandos são executados para produzir dois estados alternativos e um desses estados é selecionado dependendo no resultado da expressão. A definição original diz use o resultado da expressão para pegar umas das transformações de estado denotados pelos dois comandos e execute apenas este comando. Note também que uma especificação alternativa de Cond seria necessária na segunda definição para fazer com que os tipos casassem. Um comando while pode ser especificado sintaticamente como: Cmd: γ :: while ε do γ... O resultado de C[while ε do γ]σ Depende de E[ε]σ. Se for falso, σ é inalterado. O resultado é apenas σ ou Id(σ) onde Id: S S é a função identidade. Se o resultado da expressão for verdadeiro o resultado é C[while ε do γ] o C[γ]σ Ou seja, aplique g à s e repita o laço. Em resumo, C[while ε do γ] = Cond[while ε do γ] o Χ[γ],Id)(E(ε]σ)σ Ou de forma equivalente = (if E[ε]σ then C[while ε do γ] o C[γ] else Id)σ Esta é uma definição recursiva no sentido em que o significado do laço while depende dele próprio. Isso é um causador potencial de problemas uma vez que este tipo de equação pode ter zero, uma ou um número infinito de soluções! Naturalmente a semântica de uma linguagem de programação deveria ter exatamente uma solução ou significado. Impresso em 18/04/05 às 16:32 Página 10 de 10

Semântica Denotacional

Semântica Denotacional Semântica Denotacional Uma introdução ISBN 0-321-19362-8 Semântica denotacional é um método formal para definir a semântica de linguagens de programação. Interessa a: projetista de linguagens, quem escreve

Leia mais

SEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end.

SEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end. SEMÂNTICA program simples = var x : int := 3 in x := x + 5 end. rode =? Rogério Rocha Roteiro Introdução Sintaxe Semântica Dinâmica (Métodos formais) Operacional Axiomática Denotacional Estática Conclusão

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

15/03/2018. Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação

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

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

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

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

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

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

Semântica Operacional

Semântica Operacional Semântica Conceitos Semântica é o estudo do significado. Incide sobre a relação entre significantes, tais como palavras, frases, sinais e símbolos, e o que eles representam, a sua denotação. Semântica

Leia mais

Paradigmas de Programação

Paradigmas de Programação Paradigmas de Programação Sintaxe e semântica Aula 4 Prof.: Edilberto M. Silva http://www.edilms.eti.br Prof. Edilberto Silva / edilms.eti.br Sintaxe A sintaxe de uma linguagem de programação é a forma

Leia mais

Python e sua sintaxe LNCC UFRJ

Python e sua sintaxe LNCC UFRJ Python e sua sintaxe LNCC UFRJ Linguagens naturais e formais Linguagens naturais Linguagem formal Um conjunto finito e não-vazio cujos elementos são símbolos Qualquer cadeia finita de símbolos justapostos

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

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

Programação Introdução

Programação Introdução PROGRAMAÇÃO Programação Introdução Prof. Dr. Adriano Mauro Cansian 1 Introdução Para armazenar um algoritmo na memória de um computador e para que ele possa, em seguida, comandar as operações a serem executadas,

Leia mais

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO Prof.ª Danielle Casillo Diferentes computadores podem ter diferentes arquiteturas e os diversos tipos de linguagem de programação.

Leia mais

Linguagens de Programação

Linguagens de Programação 45 Linguagens de Programação O paradigma de programação imperativo está diretamente atrelado à arquitetura básica dos computadores sobre os quais os programas eram executados. Boa parte dos computadores

Leia mais

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação Aula 03 Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação Linguagens de Programação A primeira linguagem de programação foi criada por Ada Lovelace. Amiga

Leia mais

Compiladores - Análise Léxica

Compiladores - Análise Léxica Compiladores - Análise Léxica Fabio Mascarenhas 2017.2 http://www.dcc.ufrj.br/~fabiom/comp Introdução Primeiro passo do front-end: reconhecer tokens Tokens são as palavras do programa O analisador léxico

Leia mais

Expressões e sentença de atribuição

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

Linguagens de Programação. Marco A L Barbosa

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

Linguagens de Programação

Linguagens de Programação Linguagens de Programação de Linguagens de Programação Bruno Lopes Bruno Lopes Linguagens de Programação 1 / 11 Propriedades desejáveis Legibilidade: A leitura do programa é facilmente compreendida? Redigibilidade:

Leia mais

Capítulo 8. Estruturas de Controle no Nível de Sentença

Capítulo 8. Estruturas de Controle no Nível de Sentença Capítulo 8 Estruturas de Controle no Nível de Sentença Níveis de fluxo de controle Computações são realizadas por meio da avaliação de expressões e da atribuição dos valores a variáveis Para tornar a computação

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. Prof. Bruno Moreno Aula 8 02/05/2011

Compiladores. Prof. Bruno Moreno Aula 8 02/05/2011 Compiladores Prof. Bruno Moreno Aula 8 02/05/2011 RECONHECIMENTO DE TOKENS Reconhecimento de Tokens Até aqui aprendemos a identificar tokens Para reconhecimento, a única abordagem utilizada foi árvores

Leia mais

SEMÂNTICA 02/09/2013. Conceitos de LPs - Semântica

SEMÂNTICA 02/09/2013. Conceitos de LPs - Semântica UNIVERSIDADE ESTADUAL DE SANTA CRUZ CURSO: CIÊNCIA DA COMPUTAÇÃO DISCIPLINA: CONCEITOS DE LINGUAGENS DE PROGRAMAÇÃO DOCENTE: ROGÉRIO VARGAS DISCENTE: MARIANNA NOVAES Semântica SEMÂNTICA Semântica é a área

Leia mais

Um alfabeto é um conjunto de símbolos indivisíveis de qualquer natureza. Um alfabeto é geralmente denotado pela letra grega Σ.

Um alfabeto é um conjunto de símbolos indivisíveis de qualquer natureza. Um alfabeto é geralmente denotado pela letra grega Σ. Linguagens O conceito de linguagem engloba uma variedade de categorias distintas de linguagens: linguagens naturais, linguagens de programação, linguagens matemáticas, etc. Uma definição geral de linguagem

Leia mais

Intuição da sintaxe de L2 (35)

Intuição da sintaxe de L2 (35) 2.2 A Linguagem L2 2.2 A Linguagem L2 A linguagem L2 é uma extensão de L1 com funções recursivas, memória (acesso e atualização de variáveis), sequência de comandos ( ; ) e laço de repetição while. Primeiro,

Leia mais

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

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

Leia mais

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

Introdução O problema geral de descrever sintaxe Métodos formas de descrever sintaxe Gramática de atributos Semântica dinâmica

Introdução O problema geral de descrever sintaxe Métodos formas de descrever sintaxe Gramática de atributos Semântica dinâmica Capítulo 3 Descrevendo sintaxe e semântica ISBN 0-321-19362-8 Tópicos Introdução O problema geral de descrever sintaxe Métodos formas de descrever sintaxe Gramática de atributos Semântica dinâmica Copyright

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

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

FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS

FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS Acadêmico: Roger Anderson Schmidt Orientador : Marcel Hugo Supervisor : Ricardo de Freitas Becker Empresa

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

Semântica Axiomática

Semântica Axiomática Semântica Axiomática O estilo axiomático presta-se particularmente à prova e raciocínio sobre propriedades dos programas, e à sua verificação, i.e. à prova de correcção dos programas face às suas especificações.

Leia mais

Projeto de Compiladores

Projeto de Compiladores Projeto de Compiladores FIR Faculdade Integrada do Recife João Ferreira 12 e 13 de fevereiro de 2007 Questionário 1. Em quais linguagens de programação você já programou? 2. O que você sabe sobre compiladores?

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

Análise Sintática. Fabiano Baldo

Análise Sintática. Fabiano Baldo Compiladores Análise Sintática Fabiano Baldo Gramáticas Livre de Contexto (GLC) É utilizada na especificação formal lda sintaxe de uma linguagem de programação. É um conjunto de produções ou regras gramaticais

Leia mais

Construção de Compiladores

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

Leia mais

Matemática Discreta para Ciência da Computação

Matemática Discreta para Ciência da Computação Matemática Discreta para Ciência da Computação P. Blauth Menezes blauth@inf.ufrgs.br Departamento de Informática Teórica Instituto de Informática / UFRGS Matemática Discreta para Ciência da Computação

Leia mais

1 Postulado de Church-Turing 1

1 Postulado de Church-Turing 1 1 Postulado de Church-Turing 1 Alguns modelos alternativos no estudo da computabilidade Turing: Máquina de Turing Gödel-Kleene: Funções recursivas Church: Cáluculo λ (funções definidas por termos λ) Post:

Leia mais

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição Expressões e Instruções de Atribuição Cristiano Lehrer Introdução Expressões são o meio fundamental de especificar computações em uma linguagem de programação: Familiarização com as ordens de avaliação

Leia mais

Gramáticas Livres de Contexto Parte 1

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

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação Paradigma Imperativo Matheus Hafner Tiago Xavier CET 087 - Conceitos de Linguagens de Programação (CLP) 10 de novembro de 2011 Sumário 1 Introdução 2 Paradigma imperativo Modelo

Leia mais

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO TEORIA DA COMPUTAÇÃO Aula 04 Programa Recursivo e Máquinas Prof.ª Danielle Casillo Funções recursivas Alguma função é recursiva quando

Leia mais

Estruturas de Repetição

Estruturas de Repetição Algoritmos e Estruturas de Dados I (DCC/003) Estruturas de Repetição Aula Tópico 4 (while, for) 1 Problema 10 Suponha que soma (+) e subtração (-) são as únicas operações disponíveis em C. Dados dois números

Leia mais

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição 1 Comando while Deseja-se calcular o valor de: 1 + 2 + 3 +... + N. Observação: não sabemos, a priori, quantos termos

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

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

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

Leia mais

Lógica de Hoare. Abordagem que usaremos: aplicar o método de Hoare sobre uma linguagem de programação imperativa simplificada.

Lógica de Hoare. Abordagem que usaremos: aplicar o método de Hoare sobre uma linguagem de programação imperativa simplificada. Lógica de Hoare Método axiomático para provar que determinados programas são corretos. Introduzido em 1969 por Charles Antony Richard Hoare. Também utilizado para especificar a semântica de linguagens

Leia mais

Compiladores. Eduardo Ferreira dos Santos. Fevereiro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 38

Compiladores. Eduardo Ferreira dos Santos. Fevereiro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 38 Compiladores Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Fevereiro, 2017 1 / 38 Sumário 1 Compiladores 2 Linguagens de programação 3 Ciência dos compiladores

Leia mais

Elementos básicos das linguagens de programação

Elementos básicos das linguagens de programação Elementos básicos das linguagens de programação Objetivos: Apresentar os últimos elementos básicos das linguagens de programação Elementos básicos já estudados Entrada (read, readln) Saída (write, writeln)

Leia mais

I1, I2 e In são instruções simples ou estruturadas da linguagem Pascal.

I1, I2 e In são instruções simples ou estruturadas da linguagem Pascal. Capítulo 4 TESTES, ESCOLHAS E MALHAS DE REPETIÇÃO 1. INTRODUÇÃO Em muitos exemplos e exercícios realizados nos capítulos anteriores, não foram raras as vezes em que fizemos uso de elementos disponíveis

Leia mais

Conceitos Básicos de Programação

Conceitos Básicos de Programação BCC 201 - Introdução à Programação Conceitos Básicos de Programação Guillermo Cámara-Chávez UFOP 1/53 Conceitos básicos I Variável 2/53 Conceitos básicos II Posição de memoria, identificada através de

Leia mais

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Introdução geovanegriesang@unisc.br Processadores de linguagem Linguagens de programação são notações para se descrever

Leia mais

Expressões e Instruções de Atribuição. George Darmiton da Cunha Cavalcanti

Expressões e Instruções de Atribuição. George Darmiton da Cunha Cavalcanti Expressões e Instruções de Atribuição George Darmiton da Cunha Cavalcanti (gdcc@cin.ufpe.br) Tópicos Introdução Expressões Aritméticas Operadores Sobrecarregados Conversões de Tipo Expressões Relacionais

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

Linguagem Pascal. Prof. Antonio Almeida de Barros Junior

Linguagem Pascal. Prof. Antonio Almeida de Barros Junior Linguagem Pascal Prof. Antonio Almeida de Barros Junior 1 Linguagem Pascal Criada para ser uma ferramenta educacional (Década de 70); Prof. Niklaus Wirth (Universidade de Zurique); Blaise Pascal (Matemático

Leia mais

Linguagens Formais e Autômatos

Linguagens Formais e Autômatos Linguagens Formais e Autômatos Gramáticas Livre do Contexto (GLC) Cristiano Lehrer, M.Sc. Linguagens Livres do Contexto (1/2) Seu estudo é de fundamental importância na informática: Compreende um universo

Leia mais

Linguagens Livres de Contexto

Linguagens Livres de Contexto Linguagens Livres de Contexto 1 Roteiro Gramáticas livres de contexto Representação de linguagens livres de contexto Formas normais para gramáticas livres de contexto Gramáticas ambíguas Autômatos de Pilha

Leia mais

Autômatos e Linguagens

Autômatos e Linguagens Autômatos e Linguagens Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Agosto, 2016 1 / 41 Sumário 1 Compiladores 2 Linguagens de programação 3 Ciência dos compiladores

Leia mais

Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens

Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens 1 Introdução Estudar computação do ponto de vista teórico é sinônimo de caracterizar

Leia mais

Compiladores - Análise Léxica

Compiladores - Análise Léxica Compiladores - Análise Léxica Fabio Mascarenhas 2018.1 http://www.dcc.ufrj.br/~fabiom/comp Introdução Primeiro passo do front-end: reconhecer tokens Tokens são as palavras do programa O analisador léxico

Leia mais

Programas em L1 pertencem ao conjunto de árvores de sintaxe abstrata definido pela gramática abstrata abaixo:

Programas em L1 pertencem ao conjunto de árvores de sintaxe abstrata definido pela gramática abstrata abaixo: 1 Semântica Operacional e Sistemas de Tipos Vamos definir a semântica operacional de uma série de linguagens no estilo conhecido por semântica operacional estrutural chamado também de semântica operacional

Leia mais

Capítulo 7. Expressões e Sentenças de Atribuição

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

3. Linguagem de Programação C

3. Linguagem de Programação C Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3.2. Estrutura de Programas e Representação

Leia mais

Prof. A. G. Silva. 28 de agosto de Prof. A. G. Silva INE5603 Introdução à POO 28 de agosto de / 1

Prof. A. G. Silva. 28 de agosto de Prof. A. G. Silva INE5603 Introdução à POO 28 de agosto de / 1 INE5603 Introdução à POO Prof. A. G. Silva 28 de agosto de 2017 Prof. A. G. Silva INE5603 Introdução à POO 28 de agosto de 2017 1 / 1 Comandos de decisão simples e compostas Objetivos: Utilização de controles

Leia mais

Introdução à Ciência da Computação

Introdução à Ciência da Computação Introdução à Ciência da Computação Variáveis Conceitos Básicos Variáveis x Constantes a = x + 5 a, x e 5 são variáveis ou constantes? Variáveis As variáveis são recipientes de valores É um espaço reservado

Leia mais

ALGORITMOS E TÉCNICAS DE PROGRAMAÇÃO

ALGORITMOS E TÉCNICAS DE PROGRAMAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE ALGORITMOS E TÉCNICAS DE PROGRAMAÇÃO Docente: Éberton da Silva Marinho e-mail: ebertonsm@gmail.com eberton.marinho@ifrn.edu.br

Leia mais

Apêndice A. Pseudo-Linguagem

Apêndice A. Pseudo-Linguagem Apêndice A. Pseudo-Linguagem Apostila de Programação I A.1 Considerações Preliminares Os computadores convencionais se baseiam no conceito de uma memória principal que consiste de células elementares,

Leia mais

Prof. Adriano Maranhão COMPILADORES

Prof. Adriano Maranhão COMPILADORES Prof. Adriano Maranhão COMPILADORES LINGUAGENS: INTERPRETADAS X COMPILADAS Resumo: Linguagem compilada: Se o método utilizado traduz todo o texto do programa, para só depois executar o programa, então

Leia mais

Linguagens Formais e Autômatos P. Blauth Menezes

Linguagens Formais e Autômatos P. Blauth Menezes Linguagens Formais e Autômatos P. Blauth Menezes blauth@inf.ufrgs.br Departamento de Informática Teórica Instituto de Informática / UFRGS Matemática Discreta para Ciência da Computação - P. Blauth Menezes

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

Como podemos provar que este programa termina com x = 100. Correr o programa seguindo a sua semântica operacional é uma opção.

Como podemos provar que este programa termina com x = 100. Correr o programa seguindo a sua semântica operacional é uma opção. Verificação Automática de Programas Consideremos o seguinte programa para calcular 100 m=1 m: x:=0; y:=1; (while y!=101 do x:=x+y;y:=y+1) Como podemos provar que este programa termina com x = 100 m=1 m.

Leia mais

Revisão: linguagens de programação

Revisão: linguagens de programação Revisão: linguagens de programação Definição, histórico, paradigmas e semântica Prof. Thiago A. S. Pardo taspardo@icmc.usp.br Definição Uma linguagem de programação é uma linguagem destinada a ser usada

Leia mais

Compiladores - Gramáticas

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

Leia mais

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

Aula 3: Algoritmos: Formalização e Construção

Aula 3: Algoritmos: Formalização e Construção Aula 3: Algoritmos: Formalização e Construção Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Algoritmos: Formalização e Pseudo-Código Programação de

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

Programação I Apresentação

Programação I Apresentação Programação I Apresentação Prof. Carlos Alberto carlos.batista@facape.br carlos36_batista@yahoo.com.br Referências JUNIOR, D. P.; NAKAMITI, G. S.; ENGELBRECHT, A. de M. E.; BIANCHI, F. Algoritmos e Programação

Leia mais

Compiladores - Gramáticas

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

Leia mais

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

Compiladores Análise de Tipos

Compiladores Análise de Tipos Compiladores Análise de Tipos Fabio Mascarenhas 2018.1 http://www.dcc.ufrj.br/~fabiom/comp Tipos Um tipo é: Um conjunto de valores Um conjunto de operações sobre esses valores Os tipos de uma linguagem

Leia mais

Construção de Compiladores. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2014.

Construção de Compiladores. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2014. Construção de Compiladores Capítulo 1 Introdução José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2014.2 1/22 1 Linguagens de programação 2 Compilação 2/22 Tópicos 1

Leia mais

Compiladores - Análise Recursiva

Compiladores - Análise Recursiva Compiladores - Análise Recursiva Fabio Mascarenhas 2015.2 http://www.dcc.ufrj.br/~fabiom/comp Geradores x Reconhecedores A definição formal de gramática dá um gerador para uma linguagem Para análise sintática,

Leia mais

Gramática. Prof. Yandre Maldonado e Gomes da Costa. Prof. Yandre Maldonado - 1

Gramática. Prof. Yandre Maldonado e Gomes da Costa. Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa yandre@din.uem.br Prof. Yandre Maldonado - 2 Mecanismo gerador que permite definir formalmente uma linguagem; Através de uma gramática

Leia mais

Gramática. Gramática. Gramática

Gramática. Gramática. Gramática Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa yandre@din.uem.br Prof. Yandre Maldonado - 2 Mecanismo gerador que permite definir formalmente uma linguagem; Através de uma gramática

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação Celso Olivete Júnior olivete@fct.unesp.br Na aula passada Expressões Precedência e associatividade de operador Sobrecarga de operador Expressões de modo misto Várias formas de

Leia mais

4) Defina o que vem a ser um algoritmo, e porque, o mesmo depende do processo.

4) Defina o que vem a ser um algoritmo, e porque, o mesmo depende do processo. Lista de Exercício 1 Algoritmo e Programação 29/08/2018 (Solução) 1) Escreva conforme a premissas computacionais, o que vem a ser, lógica. R: São as premissas básicas para se executar instruções, alocadas

Leia mais

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

Compiladores. Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal. S. Melo de Sousa Compiladores Compiladores Verificação e inferência dos Tipos Simão Melo de Sousa Computer Science Department University of Beira Interior, Portugal Problema Permitir evitar declarar o tipo das variáveis, das assinaturas

Leia mais

Análise Sintática. Compiladores Cristina C. Vieira. Compiladores 2012/2013

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

08/05/2012. Tipos de dados. Tipos de dados. Elementos Básicos. Tipos de dados. Elementos Básicos Tipos de dados. Dados e seus tipos:

08/05/2012. Tipos de dados. Tipos de dados. Elementos Básicos. Tipos de dados. Elementos Básicos Tipos de dados. Dados e seus tipos: INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DA PARAÍBA CAMPUS CAMPINA GRANDE 1 2 Elementos Básicos Tipos de dados Dados e seus tipos: Computadores lidam com diversos tipos de dados: numéricos,

Leia mais