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

Documentos relacionados
INE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:

Linguagens Formais e Autômatos

Conceitos de Linguagens de Programação

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

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

Introdução à Programação

Python e sua sintaxe LNCC UFRJ

INE5318 Construção de Compiladores. Ricardo Azambuja Silveira INE-CTC-UFSC URL:

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

Linguagens de Programação Aula 4

Conceitos de Linguagens de Programação

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

Linguagens Livres de Contexto

Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida)

Plano da aula. Compiladores. Os erros típicos são sintáticos. Análise Sintática. Usando Gramáticas. Os erros típicos são sintáticos

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

Linguagens de Programação

Conceitos de Linguagens de Programação

FACULDADE LEÃO SAMPAIO

Compiladores Analisador Sintático. Prof. Antonio Felicio Netto Ciência da Computação

Como construir um compilador utilizando ferramentas Java

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

Análise Sintática Introdução

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

Análise Sintática. Fabiano Baldo

Compiladores. Análise Léxica

Compiladores. Introdução

Questões de Paradigmas de Programação Matéria: Prova 1 4ª EDIÇÃO

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

CAP. VI ANÁLISE SEMÂNTICA

Gramáticas Livres de Contexto Parte 1

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

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

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

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

Revisão: linguagens de programação

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

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

Compiladores - Análise Léxica

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

Compiladores - Gramáticas

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

Compiladores - Gramáticas

Linguagens de Programação Sintaxe e Semân5ca

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

Gramática. Gramática. Gramática

Compiladores. Análise lexical. Plano da aula. Motivação para análise lexical. Vocabulário básico. Estrutura de um compilador

Compiladores. Análise Sintática

Concurso Público para provimento de cargo efetivo de Docentes. Edital 20/2015 CIÊNCIA DA COMPUTAÇÃO II Campus Rio Pomba

Projeto de Compiladores

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

Compiladores. Conceitos Básicos

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

Notação EBNF BNF estendida Notação usada com o YACC (gerador de parsers Bottom-up)

Compiladores - Análise Recursiva

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

Como construir um compilador utilizando ferramentas Java

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

Linguagens de Programação Aula 3

Linguagens e Programação Gramáticas. Paulo Proença

Notação EBNF BNF estendida Notação usada com o YACC (gerador de parsers Bottom-up)

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

Compiladores - Análise Léxica

Compiladores 02 Analise léxica

Teoria e Implementação de Linguagens Computacionais. Especificação do projeto da disciplina (2006.1) Versão de 23/08/2006.

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

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

Uma gramática é ambígua se existe alguma cadeia para qual ela tem mais de uma árvore sintática

Estruturas de Controle: Nível de Unidades de Programação

Gramáticas Livres de Contexto

Compiladores - Especificando Sintaxe

LINGUAGENS FORMAIS Definições. Desenvolveram-se na História em função da necessidade dos grupos humanos que as empregavam

Programação Introdução

Tipo. Tipo de uma variável: especificação de

Introdução Uma linguagem de programação apoiada em um paradigma imperativo apresenta algum grau de dificuldade nos aspectos relativos ao contexto;

Erros de Tipo em Pascal Simplifificado

Construção de Compiladores Aula 16 - Análise Sintática

Compiladores. Análise Semântica

Revisão. Fases da dacompilação

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

IV Gramáticas Livres de Contexto

Compiladores. Prof. Bruno Moreno Aula 8 02/05/2011

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

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Compiladores Análise Semântica

LINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO

Paradigmas de Programação

Semântica Denotacional

Compiladores. Análise Léxica

I.2 Introdução a Teoria da Computação

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

Compilação da linguagem Panda

Compiladores Análise de Tipos

Compiladores Análise Semântica

Análise Semântica: Verificação de Tipos

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

II.1 Conceitos Fundamentais. Uma delas é programar o =>

Transcrição:

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 o significado dos programas: semântica dinâmica

Introdução Sintaxe A forma ou estrutura das expressões, das instruções e das unidades de programas Semântica O significa das expressões, das instruções e das unidades de programas Exemplo: comando if na linguagem C Sintaxe if (<expr>) <instrução> Semântica Se o valor da expressão for verdadeiro, a instrução será executada

Introdução A sintaxe e a semântica provêm a definição da linguagem Usuários da definição da linguagem Projetistas de linguagens Programadores Descrever a sintaxe é mais fácil do que a semântica Uma notação concisa e universal para a sintaxe existe

Descrevendo a sintaxe: terminologia Uma sentença é uma cadeia de caracteres sobre um alfabeto Uma linguagem é uma conjunto de sentenças Um lexema é a unidade sintática de mais baixo nível de uma linguagem Exemplos: *, sum, begin Um token é uma categoria dos lexemas Exemplo: identificador, op_mult

Descrevendo a sintaxe: terminologia Em alguns casos, um token tem apenas um único lexema possível. Exemplo de instrução em C index = 2 * cont + 17; Lexema index = 2 * Cont + 17 ; Token Identificador sinal_igual int_literal op_mult identificador op_soma int_literal ponto_e_vírgula

Definição formal de linguagens Reconhecedores de linguagens Um dispositivo que recebe uma string como entrada e verifica se a mesma pertence a linguagem Exemplo: análise sintática (parte de um compilador) Geradores de linguagens Um dispositivo que gera sentenças de uma linguagem É possível determinar se a sintaxe de uma sentença em particular está correta através da comparação dela com a estrutura do gerador

Métodos formais para descrever a sintaxe Forma de Backus-Naur e Gramática Livre de Contexto Método mais usado para descrever a sintaxe das linguagens de programação Extended BNF (Backus-Naur Form) Aumenta readability e writability da BNF

BNF e Gramáticas Livres de Contexto Gramáticas Livres de Contexto Desenvolvida por Noam Chomsky nos meados da década de 1950 Objetivando descrever a sintaxe das linguagens naturais Define uma classe de linguagens chamadas de linguagens livres de contexto

Backus-Naur Form (BNF) Backus-Naur Form (1959) Inventada por John Backus para descrever o Algol 58 BNF é equivalente a gramáticas livre de contexto BNF é uma metalinguagem usada para descrever outras linguagens Em BNF, abstrações são usadas para representar classes de estruturas sintáticas Agem como variáveis sintáticas (também chamadas de símbolos não-terminais)

BNF Fundamentos Não-terminais: BNF abstrações Terminais: lexemas e tokens Gramática: uma coleção de regras Exemplos de regras BNF: <ident_list> identifier identifier, <ident_list> <if_stmt> if <logic_expr> then <stmt> Abstrações

Regras BNF Uma regra possui um lado esquerdo (LHS) e um lado direito (RHS), e consiste de símbolos terminais e não-terminais Uma gramática é um conjunto não vazio de regras Uma abstração (ou símbolo não-terminal) pode ter mais de um RHS <stmt> <single_stmt> begin <stmt_list> end

Descrevendo Listas Listas sintáticas são descritas usando recursão <ident_list> ident ident, <ident_list> Uma derivação é a aplicação de regras repetidas vezes, começando com um símbolo inicial e finalizando com uma sentença formada de símbolos terminais

Uma gramática para uma pequena linguagem

Uma gramática para instruções de atribuição simples

Árvore de Análise (Parse Tree)

Ambigüidade em gramáticas Uma gramática é ambígua se e somente se ela gera uma sentença para a qual há duas ou mais árvores de análise distintas

Uma gramática ambígua para instruções de atribuição simples

Duas árvores de análise para a mesma sentença

Uma gramática não-ambígua para expressões

A árvore de análise única para a expressão

Associatividade de operadores Associatividade de operadores podem ser indicados pela gramática <expr> -> <expr> + <expr> const (ambígua) <expr> -> <expr> + const const (não-ambígua) <expr> <expr> + const <expr> + const const

Uma árvore de análise ilustrando a associatividade da adição

BNF estendida Partes opcionais são colocadas entre colchetes [ ] <proc_call> -> ident [(<expr_list>)] Opções de múltipla escolha, partes alternativas da RHS são colocadas dentro de parênteses e separadas por barras verticais <term> <term>(+ -) const Repetições (0 ou mais) são colocadas dentro de chaves { } <ident> letter {letter digit}

BNF e EBNF

Gramáticas de Atributos Gramáticas livres de contexto (GLC) não podem descrever toda a sintaxe de linguagens de programação Compatibilidade de tipos Pois a gramática iria se tornar grande demais Exigindo símbolos não-terminais e regras adicionais Gramáticas de atributos incorporam informações semânticas nas parse trees

Gramáticas de Atributos Exemplos de regras que não podem ser especificadas na BNF Determina que todas as variáveis devem ser declaradas antes de serem referenciadas O end do subprograma Ada seguido de um nome deve coincidir com o nome do subprograma Esses dois problemas exemplificam a categoria das regras de linguagem chamada de semântica estática Leva esse nome pois a análise necessária para verificar essas especificações pode ser feita na compilação

Gramáticas de Atributos: Exemplo Em um procedimento em Ada, o nome no end deve ser igual ao nome do procedimento Regra de sintaxe <def_proc> procedure <nome_do_proc>[1] <corpo_do_proc> end <nome_do_proc>[2] Regra semântica <nome_do_proc>[1].string = <nome_do_proc>[2].string

Gramáticas de Atributos: Exemplo Verificação das regras de tipos de uma instrução de atribuição simples Parte sintática da gramática <assign> <var> = <expr> <expr> <var> + <var> <var> <var> A B C Observações: As variáveis podem ser de dois tipos: int ou real O tipo do lado esquerda expressão deve ser o mesmo do lado direito O tipo da expressão quando os tipos dos operandos são diferentes é real

Gramáticas de Atributos do exemplo anterior

Gramáticas de Atributos: uma árvore de análise

Gramáticas de Atributos: computando os valores de atributo 1. <var>.tipo_efetivo look-up(a) Regra 4 2. <expr>.tipo_esperado var.tipo_efetivo Regra 1 3. <var>[2].tipo_efetivo look-up (A) Regra 4 <var>[3].tipo_efetivo look-up (B) Regra 4 4. <expr>.tipo_efetivo int ou real Regra 2 5. <expr>.tipo_esperado = <expr>.tipo_efetivo é TRUE ou FALSE Regra 2

Gramáticas de Atributos: computando os valores de atributo Valores finais nos vértices, adotando A como real e B como int

Gramáticas de Atributos: avaliação Têm sido utilizadas em diversas aplicações Descrições completas da sintaxe e da semântica de linguagens de programação Como a definição formal de uma linguagem (geração de compiladores) Sistemas de processamento de linguagens naturais Dificuldades Complexo e grande Dificuldade de leitura e escritas das gramáticas