Semântica Denotacional Adaptação de A Practical Introduction to Denotational Semantics Por Lloyd Allison Cambridge University Press, 1986
|
|
- Alana Delgado Malheiro
- 5 Há anos
- Visualizações:
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 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 maisSEMÂ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 maisIntrodução à Programação
Introdução à Programação Linguagens de Programação: sintaxe e semântica de linguagens de programação e conceitos de linguagens interpretadas e compiladas Engenharia da Computação Professor: Críston Pereira
Leia mais15/03/2018. Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação
Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação Conjunto de regras que definem a forma da linguagem; Como as sentenças podem ser formadas como sequências
Leia maisCAP. VI ANÁLISE SEMÂNTICA
CAP. VI ANÁLISE SEMÂNTICA VI.1 Introdução Semântica SIGNIFICADO, SENTIDO LÓGICO, COERÊNCIA,... Diferença entre SINTAXE e SEMÂNTICA Sintaxe : descreve as estruturas de uma linguagem; Semântica : descreve
Leia maisSintaxe e Semântica. George Darmiton da Cunha Cavalcanti.
Sintaxe e Semântica George Darmiton da Cunha Cavalcanti (gdcc@cin.ufpe.br) Tópicos Introdução O problema de descrever a sintaxe Métodos formais para descrever a sintaxe Gramáticas de atributos Descrevendo
Leia maisParadigmas de Linguagens de Programação. Descrevendo a Sintaxe e a Semântica
Descrevendo a Sintaxe e a Semântica Cristiano Lehrer Introdução Descrição, compreensível, de uma linguagem de programação é difícil e essencial. Capacidade de determinar como as expressões, instruções
Leia maisUm Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1
Definição de uma Linguagem Linguagem= sintaxe + semântica Especificação da sintaxe: gramática livre de contexto, BNF (Backus-Naur Form) Especificação Semântica: informal (textual), operacional, denotacional,
Leia maisSintaxe e Semântica. George Darmiton da Cunha Cavalcanti.
Sintaxe e Semântica George Darmiton da Cunha Cavalcanti (gdcc@cin.ufpe.br) Tópicos Introdução O problema de descrever a sintaxe Métodos formais para descrever a sintaxe Gramáticas de atributos Descrevendo
Leia maisINE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:
INE5416 Paradigmas de Programação Ricardo Azambuja Silveira INE CTC UFSC E Mail: silveira@inf.ufsc.br URL: www.inf.ufsc.br/~silveira Conceitos Léxica estudo dos símbolos que compõem uma linguagem Sintaxe
Leia maisSemâ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 maisParadigmas 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 maisPython 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 maisAnálise Sintática Introdução
Análise Sintática Introdução Renato Ferreira Linguagens e Automatas Linguagens formais são importantes em Computação Especialmente em linguagens de programação Linguagens regulares A linguagem formal mais
Leia maisCompiladores. Fabio Mascarenhas
Compiladores Fabio Mascarenhas 2017.1 http://www.dcc.ufrj.br/~fabiom/comp Introdução Compiladores x Interpretadores Offline x Online Um compilador transforma um programa executável de uma linguagem fonte
Leia maisProgramaçã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 maisUNIVERSIDADE 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 maisLinguagens 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 maisIntroduçã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 maisCompiladores - 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 maisExpressões e sentença de atribuição
Expressões e sentença de atribuição Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual
Leia maisLinguagens de Programação. Marco A L Barbosa
Expressões e sentença de atribuição Linguagens de Programação Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. http://github.com/malbarbo/na-lp-copl
Leia maisLinguagens 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 maisCapí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 maisFACULDADE LEÃO SAMPAIO
FACULDADE LEÃO SAMPAIO Paradigmas de Programação Curso de Análise e Desenvolvimento de Sistemas Turma: 309-5 Semestre - 2014.2 Paradigmas de Programação Prof. MSc. Isaac Bezerra de Oliveira. 1 PARADIGMAS
Leia maisCompiladores. 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 maisSEMÂ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 maisUm 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 maisIntuiçã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 maisDisciplina: 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 maisLinguagem de programação: Pascal
Aula 04 Linguagem de programação: Pascal Prof. Tecgº Flávio Murilo 26/03/2013 1 Pascal Introdução Pascal é uma linguagem de programação estruturada, criada em 1970 pelo suíço Niklaus Wirth, dando este
Leia maisIntroduçã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 maisSintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida)
Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida) Não-terminais são nomes mnemônicos colocados entre parênteses angulares. Vocabulário terminal formado por
Leia maisCompiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores
Motivação Prof. Sérgio Faustino Compiladores Conhecimento das estruturas e algoritmos usados na implementação de linguagens: noções importantes sobre uso de memória, eficiência, etc. Aplicabilidade freqüente
Leia maisFERRAMENTA 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 maisV Análise Sintática. V.1.1 Gramáticas Livres de Contexto Definições de GLC
V Análise Sintática V.1 Fundamentos Teóricos V.1.1 G.L.C V.1.2 Teoria de Parsing V.2 Especificação Sintática de Ling. de Prog. V.3 - Implementação de PARSER s V.4 - Especificação Sintática da Linguagem
Leia maisSemâ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 maisProjeto 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 maisV.2 Especificação Sintática de Linguagens de Programação
V.2 Especificação Sintática de Linguagens de Programação Deve ser baseada: No planejamento da Linguagem / Compilador Objetivos, Filosofia, Potencialidades,... Nos critérios de projeto/avaliação Legibilidade,
Leia maisAnálise Sintática. Fabiano Baldo
Compiladores Análise Sintática Fabiano Baldo Gramáticas Livre de Contexto (GLC) É utilizada na especificação formal lda sintaxe de uma linguagem de programação. É um conjunto de produções ou regras gramaticais
Leia maisConstruçã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 maisMatemá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 mais1 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 maisParadigmas 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 maisGramá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 maisLinguagens 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 maisUNIVERSIDADE 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 maisEstruturas 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 maisAlgoritmos 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 maisLinguagem Pascal. Prof. Sérgio Rodrigues. É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa;
Linguagem Pascal Prof. Sérgio Rodrigues Introdução Algoritmo É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa; Programa é a formalização de um algoritmo
Leia maisACH2043 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 maisLó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 maisCompiladores. 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 maisElementos 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 maisI1, 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 maisConceitos 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 maisUniversidade 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 maisExpressõ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 maisCompiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)
Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA) Análise Léxica A primeira fase da compilação Recebe os caracteres de entrada do programa e os converte em um fluxo de
Leia maisLinguagem 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 maisLinguagens 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 maisLinguagens 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 maisAutô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 maisProcedimentos 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 maisCompiladores - 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 maisProgramas 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 maisCapítulo 7. Expressões e Sentenças de Atribuição
Capítulo 7 Expressões e Sentenças de Atribuição Introdução Expressões são os meios fundamentais de especificar computações em uma linguagem de programação Para entender a avaliação de expressões, é necessário
Leia mais3. 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 maisProf. 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 maisIntroduçã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 maisALGORITMOS 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 maisApê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 maisProf. 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 maisLinguagens 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 maisLinguagens de Programação Aula 3
Aula 3 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada... Classificação das LPs (nível, geração e paradigma) Paradigmas Imperativo, OO, funcional, lógico e concorrente 2/33 Na aula de hoje...
Leia maisComo 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 maisRevisã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 maisCompiladores - 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 maisLinguagens de Programação Aula 4
Aula 4 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada... Autômatos finitos AF:exemplos... Cadeia de caracteres a,b,c 2/82 Na aula passada... Autômatos finitos AF:exemplos... Números inteiros(com
Leia maisCompiladores 02 Analise léxica
Compiladores 02 Analise léxica Sumário Análise Léxica Definição: Lexema, tokens Tabela símbolos Expressões regulares, automatos Relembrando O compilador é dividido em duas etapas Análise Síntese Análise
Leia maisCompiladores. 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 maisAula 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 maisCompiladores - Especificando Sintaxe
Compiladores - Especificando Sintaxe Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Sintática A análise sintática agrupa os tokens em uma árvore sintática de acordo com a estrutura
Leia maisProgramaçã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 maisCompiladores - 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 maisCompiladores. Introdução
Compiladores Introdução Apresentação Turma Noite Continuada I 20/03 Continuada II 22/05 Atividades Regimental 05/06 Total 1 Ponto 1 Ponto 1 Ponto 7 Pontos 10 Pontos Aulas expositivas teórico-práticas Exercícios
Leia maisCompiladores 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 maisConstruçã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 maisCompiladores - Análise Recursiva
Compiladores - Análise Recursiva Fabio Mascarenhas 2015.2 http://www.dcc.ufrj.br/~fabiom/comp Geradores x Reconhecedores A definição formal de gramática dá um gerador para uma linguagem Para análise sintática,
Leia maisGramá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 maisGramá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 maisLinguagens 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 mais4) 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 maisCompiladores. 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 maisAnálise Sintática. Compiladores Cristina C. Vieira. Compiladores 2012/2013
Análise Sintática Compiladores Cristina C. Vieira 1 Árvore Sintática Nós internos: símbolos não-terminais Folhas: símbolos terminais Arcos: de símbolos não-terminais do LHS da produção para nós do RHS
Leia maisTÉCNICO DE INFORMÁTICA - SISTEMAS
782 - Programação em C/C++ - estrutura básica e conceitos fundamentais Linguagens de programação Linguagem de programação são conjuntos de palavras formais, utilizadas na escrita de programas, para enunciar
Leia mais08/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