Python e sua sintaxe LNCC UFRJ

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

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

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

Introdução à Programação

Conceitos de Linguagens de Programação

Compiladores - Análise Léxica

Linguagens Formais e Autômatos

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

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

Gramática. Gramática. Gramática

Compiladores - Análise Léxica

Análise Sintática. Fabiano Baldo

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

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

Linguagens Livres de Contexto

Compiladores - Especificando Sintaxe

Revisão: linguagens de programação

Conceitos de Linguagens de Programação

Linguagens Formais e Autômatos P. Blauth Menezes

LINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO

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

Definições Exemplos de gramáticas

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

Gramáticas Livres de Contexto

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

Tokens, Padroes e Lexemas

Linguagens de Programação

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

Compiladores. Análise Léxica

Introdução Definição Conceitos Básicos de Linguagem

Capítulo II Gramáticas

Como construir um compilador utilizando ferramentas Java

Capítulo II Gramáticas

Compiladores - Gramáticas

Compiladores - Gramáticas

Compiladores. Análise Sintática

Linguagens Formais e Autômatos

Linguagens Formais e Autômatos

Linguagens Formais. Aula 01 - Conceitos Básicos. Prof. Othon Batista Mestre em Informática

Definições Hierarquia de Chomsky Exemplos de gramáticas. Gramáticas. Objetivo de ensinar o inglês pelo computador e conseguir um tradutor de línguas

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

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

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

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

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

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

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Conceitos básicos de programação

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

Notas sobre Definições Recursivas

Compiladores 02 Analise léxica

Prof. Adriano Maranhão COMPILADORES

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

Linguagens de Domínio Específico

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

Análise Sintática Introdução

Eduardo Belo de Araújo. Analisador ANSI-C

Linguagens de Programação Aula 5

Compiladores Aula 4. Celso Olivete Júnior.

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

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

Análise Léxica. Sumário

Compiladores. Introdução

Paradigmas de Programação

Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

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

Teoria da Computação Aula 02 Introdução

Gramáticas Livres de Contexto Parte 1

Alfabeto, Cadeias, Operações e Linguagens

INE5317 Linguagens Formais e Compiladores. AULA 4: Gramáticas

Conceitos de Linguagens de Programação

Linguagens de Domínio Específico

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

IBM1088 Linguagens Formais e Teoria da

Análise Sintática (Cap. 04) Análise Sintática Descendente

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

Linguagens de Programação

Semântica Denotacional

Linguagens de Programação Aula 3

Compiladores 04 Analise léxica Jflex. Prof José Rui

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

IV.2 Aspectos Léxicos Convencionais

Introdução ao SciLab. SciLab O que é? Onde obter o programa:

IV Gramáticas Livres de Contexto

Aula de hoje. Tipos de Dados e Variáveis. Constantes literais. Dados. Variáveis. Tipagem dinâmica. SCC Introdução à Programação para Engenharias

Linguagens Formais e Autômatos 02/2016. LFA Aula 01 24/10/2016. Celso Olivete Júnior.

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

Compiladores - Análise Recursiva

Descrição da Linguagem DECAF

Projeto de Compiladores

Linguagens de Programação

Análise Léxica II. Eduardo Ferreira dos Santos. Setembro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 30

Linguagens, Reconhecedores e Gramáticas

Linguagens Formais e Problemas de Decisão

Transcrição:

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 inclusive a vazia, Coleção de todas as strings construídas a partir de Qualquer subconjunto L de *

princípio não existem regras para construir uma linguagem. Entretanto, ao criar uma linguagem, estamos cheios de segundas intenções e assim precisaremos de regras para atingi-las! Para = { 0, 1 }, temos = {, 0, 1, 00, 01, 10, 11, 000, 001,... }. A partir daí poderemos construir diversas linguagens, que serão muito úteis, conforme veremos.

Atenção! Um símbolo é uma entidade atômica Termos técnicos Uma string é só uma cadeia de símbolos Uma linguagem formal é só um conjunto de strings

Exemplo Coleção de símbolos para descrever jogos de baralho {,,,, A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, [, ] }

Exemplo continuação Tokens { A, 2,..., 7, J, Q, K, A, 2,..., 7, J, Q, K, A, 2,..., 7, J, Q, K, A, 2,..., 7, J, Q, K }

Exemplo continuação Mais tokens Um Par uma Terna ou uma Quadra é qualquer conjunto constituído por dois, três ou quatro cartas distintas, colocadas entre colchetes. [3, 3 ], [Q, 5 ], etc [A, A, 2 ], [7, Q, 5 ], etc [K, J, 2, 3 ], [7, A, Q, 5 ], etc

Envolve a atribuição de um significado a cada string de uma linguagem

Gramática

Gramática Uma forma de definir uma linguagem formal L a partir de um alfabeto

Componentes de uma gramática Gramática N um conjunto de símbolos não-terminais T um conjunto de símbolos terminais N T S um símbolo especial: o símbolo de partida P um conjunto de produções

Os não-terminais... São as classes gramaticais O conjunto N dos símbolos não-terminais inglês, tokens português: os verbos, substantivos, adjetivos, pronomes, etc Python: Identificadores, Palavras-chave, Literais, Operadores, Delimitadores Além de NEWLINE, INDENT e DEDENT.

Os terminais... O conjunto T dos símbolos terminais São os lexemas da linguagem As sentenças (strings) de uma linguagem são compostas apenas por símbolos terminais. Python: 12, 3.1415, pi, Paulo, while, break, continue, for, if, else, etc Português: tudo que aparece no Aurélio. Apesar dos nãoterminais serem usados na construção, eles não aparecem na sentença acabada

As produções... As regras gramaticais O conjunto P das produções As produções estabelecem como derivar as sentenças (strings) da linguagem a partir do símbolo de partida S

Uma derivação...

Metalinguagem -BNF

Meta-linguagem Linguagem auxiliar utilizada para descrever mais claramente a linguagem formal { },

Metalinguagem Pode ser uma linguagem natural como o português ou inglês, ou outra linguagem formal O formalismo de Backus-Naur (BNF)

John Warner Backus O pai do FORTRAN; Participou decisivamente na criação do ALGOL.

Peter Naur Criador do ALGOL, junto com Backus e outros

O formalismo de Backus-Naur J. W. Backus desenvolveu, especificamente para a ALGOL 58, um método para descrever linguagens de programação, que veio a ser conhecido como a forma normal de Backus. Tal método foi revisado e expandido por Peter Naur para a ALGOL 60; por sugestão de Donald Knuth, foi renomeado como a forma normal de Backus-Naur

Noam Chomsky Filadelfia, 07/12/1928 Professor do MIT

Exemplo Símbolo terminal dígito 0 1 2 3 4 5 6 7 8 9 Nome do nãoterminal (a classe dígito) Leia: É definido como Separador de alternativas

Exemplo produção dígito 0 1 2 3 4 5 6 7 8 9 natural dígito dígito natural Observe que essa definição de natural é recursiva As definições acima permitem produzir, p/ex., os seguintes naturais: 325, 9, 79, 007, 222222, 000, etc

Regras de produção Os elementos são escolhidos de uma lista; a ordem não importa dígito 0 1 2 3 4 5 6 7 8 9 natural dígito dígito natural Os elementos são escritos sequencialmente da esquerda para a direita

A EBNF e os diagramas de caminho

EBNF O EBNF não é mais poderoso que o BNF; apenas é mais facilitador mais prático. Nele são incluídas notações para repetição e para elementos opcionais No EBNF os símbolos terminais são escritos entre aspas e os não-terminais diretamente, sem os

A EBNF Um elemento opcional é escrito entre colchetes [ a ]; O elemento a pode ser incluído ou descartado A repetição de um ou mais elementos é descrita pela utilização de chaves: ( a ) + indica a repetição do a pelo menos uma vez; ( a ) * indica a repetição do a zero ou mais vezes.

Exemplo dígito 0 1... 9 inteiro [ - + ] dígito ( dígito )* inteiro [ - + ] ( dígito ) + São produções de inteiro: -1, +21, 9, 12047, etc Não são produções de inteiro: +, ++, 2-1, 9-, etc

Apesar da notação usada ser praticamente a mesma, há uma grande diferença entre o significado de definições léxicas e sintáticas. Uma definição léxica opera sobre os caracteres individuais do fluxo de entrada, ao passo que Uma definição sintática opera no fluxo de tokens gerado pela análise léxica.

EBNF e diagramas de caminho Representação gráfica Representação gráfica A B A EBNF AB Significado A seguido de B EBNF [ A ] Significado A ou nada

EBNF e diagramas de caminho Representação gráfica A B EBNF A B Significado ou A ou B

EBNF e diagramas de caminho Representação gráfica EBNF ( A )* Significado A Sequência de zero ou mais A s Representação gráfica EBNF ( A ) + Significado A Sequência de um ou mais A s

EBNF e diagramas de caminho Representação gráfica Representação gráfica a a b EBNF a z Significado Símbolo terminal EBNF a b... z

Exemplo bit sinal 0 1 + - Um número binário pode ser constituído por apenas um bit, como 0 ou 1, ou por vários, como 110. Para gerar 110: Você sai de número binário no diagrama, passa por bit e escolhe 0. Volta, passa novamente por bit e escolhe 1. Torna a voltar, passa por bit mais uma vez e escolhe 1. número binário sinal bit Diagrama léxico

A EBNF e os diagramas de caminho em Python

Python, EBNF e diagramas de sintaxe

identificador letra _ letra dígito _ letra letra_min letra_min a b letra_maius z letra_maius A B dígito 0 Z 1 9

O comando print cmd_print print expr expr,, >> expr, expr,

O comando if cmd_if if expr : seq elif expr : seq else : seq

Ele deu aumento. Retornaremos!

Tchau! Até a próxima.