Your SlideShare is downloading. ×
Python 03 - Sintaxe
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Python 03 - Sintaxe

1,132

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,132
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
23
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Linguagens, sintaxe e semântica LNCC UFRJ
  • 2. Linguagens naturais e formais
  • 3. Linguagens naturais
  • 4. 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 *
  • 5. Em 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.
  • 6. Atenção! Um símbolo é Termos uma entidade técnicos atômica Uma string é só uma cadeia de símbolos Uma linguagem formal é só um conjunto de strings
  • 7. Exemplo Coleção de símbolos para descrever jogos de baralho { ,,,, A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, [, ] }
  • 8. Exemplo – continuação Strings , , 8, 9, A, 2, A23, , 55555, JQKA, 4, 7, A, 7, 10JQKA, [A,K], etc { A, 2, ... , 7, J, Q, K, A, 2, ... , 7, J, Q, K, A, 2, ... , 7, J, Q, K, A, 2, ... , 7, J, Q, K, Uma [A,A,2], ... , [7, Q,5 ], linguagem etc }
  • 9. Envolve a atribuição de um significado a cada string de uma linguagem
  • 10. Gramática
  • 11. Gramática Uma forma de definir uma linguagem formal L a partir de um alfabeto 
  • 12. Gramática Componentes de uma gramática N – um conjunto de símbolos não-terminais T – um conjunto de N T   símbolos terminais S – um símbolo especial: o símbolo de partida P – um conjunto de produções
  • 13. Os não-terminais ... As classes gramaticais Em inglês, O conjunto N dos tokens símbolos não-terminais
  • 14. Os lexemas da Os terminais ... linguagem O conjunto T dos símbolos terminais Apesar dos não-terminais serem usados na construção, eles não aparecem na sentença acabada
  • 15. As produções ... As regras gramaticais O conjunto P das produções
  • 16. Uma derivação ...
  • 17. Produções naipe? carta: um valor seguido de um naipe mão : um conjunto de 3 cartas (p/ex.) valor? , 3A, 17, [J, K, A] , 2, 7, A, [3, J, K] Strings não São strings admissíveis em admissíveis em linguagens para linguagens para jogos de baralho jogos de baralho
  • 18. As wff’s Assim, a linguagem formal é o conjunto de todas as suas wff ’s Apenas um nome mais enfático para as strings produzidas
  • 19. Alfabeto de uma linguagem Exemplo para descrever datas no calendário { /, jan, fev, ..., dez, 0, 1 2, 3, 4, 5, 6, 7, 8, 9 }
  • 20. Produções data: o dia, seguido do mês, seguido do ano; separados pela barra Dia? Mês? Ano? 6/jan/2009, 1/abr/1998, 14/jul/1872 Datas são wff’s (strings 46/jan/2009, abr/1/1998 admissíveis) no calendário gregoriano Não são wff’s
  • 21. Metalinguagem -BNF
  • 22. Metalinguagem Linguagem auxiliar utilizada para descrever mais claramente a linguagem formal { } ,
  • 23. Metalinguagem Pode ser uma linguagem natural como o português ou inglês, ou outra linguagem formal O formalismo de Backus-Naur (BNF)
  • 24. John Warner Backus • O “pai” do FORTRAN; • Participou decisivamente na criação do ALGOL.
  • 25. Peter Naur Criador do ALGOL, junto com Backus e outros
  • 26. 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
  • 27. Noam Chomsky Filadelfia, 07/12/1928 Professor do MIT
  • 28. Exemplo Símbolo terminal  dígito   0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Separador de Nome do alternativas identificador da classe
  • 29. Exemplo – produção  dígito   0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9  natural    dígito  |  dígito   natural  Observe que a definição de natural é recursiva
  • 30. 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
  • 31. A EBNF e os diagramas de caminho
  • 32. 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  
  • 33. 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.
  • 34. Exemplo dígito  “0” | “1” | ... | “9” inteiro  [ “ - ” | “ + ” ] dígito ( dígito )* São produções de inteiro: -1, +21, 9, 12047, etc inteiro  [ “ - ” | “ + ” ] ( dígito )+
  • 35. 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. Todas as utilizações da BNF no próximo capítulo, Análise léxica, são definições léxicas; já nos capítulos subsequentes são definições sintáticas.
  • 36. EBNF e diagramas sintáticos Representação gráfica Representação gráfica A A B EBNF EBNF AB [A] Significado Significado A seguido de B A ou nada
  • 37. EBNF e diagramas Representação gráfica sintáticos A B EBNF A|B Significado ou A ou B
  • 38. EBNF e diagramas sintáticos Representação gráfica Representação gráfica A A EBNF EBNF ( A )* ( A )+ Significado Significado Sequência de zero Sequência de um ou mais A ’s ou mais A ’s
  • 39. EBNF e diagramas sintáticos Representação gráfica Representação gráfica a a b EBNF a z Significado Símbolo EBNF terminal a | b | ... | z
  • 40. Exemplo Um número binário pode ser constituído por apenas um bit, como 0 ou 1, ou por vários, como 110. 0 bit Para gerar 110: 1 • Você sai de número binário no diagrama, passa por bit e escolhe 0. + • Volta, passa novamente por bit sinal e escolhe 1. - • Torna a voltar, passa por bit mais uma vez e escolhe 1. sinal número bit binário Diagrama sintático
  • 41. Python, EBNF e diagramas de sintaxe Mais adiante no curso, teremos a oportunidade de trabalhar com a EBNF para definição da sintaxe da Linguagem Python. Todo o manual de referência da linguagem, em The Python Language Reference é construído utilizando a EBNF; confira em Python v2.6.5 documentation A seguir exibiremos alguns exemplos.
  • 42. A definição de nome em Python letra_min a b nome ::= letra_min ( letra_min | “_” )* letra_min ::= “a”...”z” z nome letra_min letra_min _
  • 43. O comando print expr , , expr cmd_print print >> expr , expr ,
  • 44. O comando print O comando print avalia uma expressão por vez e escreve o objeto resultante na saída padrão (veja a seguir). Se um objeto não é uma string ele é convertido antes numa string, usando as regras para conversão de strings. Então ela é escrita (a resultante ou a original). É colocado (escrito) um espaço antes que cada objeto seja (convertido e) escrito, a menos que o sistema de saída acredite que foi posicionado no início de uma linha. Este é o caso quando: 1. ainda foi escrito nenhum caractere na saída padrão 2. o último caractere escrito na saída padrão é ‘ n’ , ou 3. a última operação de escrita na saída padrão não foi um comando print. (Por essa razão, em alguns casos pode ser funcional escrever uma string vazia para a saída).
  • 45. O comando if cmd_if if expr : seq elif expr : seq else : seq
  • 46. O comando if O comando if é usado para execução condicional. Ele seleciona exatamente uma das sequências avaliando as expressões uma a uma até achar uma que seja verdadeira (true – veja a seção Operações booleanas para as definições de true e false); então essa sequência é executada (e nenhuma outra parte do comando if é executado ou avaliado). Se todas as expressões são falsas, é executada a sequência associada à clausula else (caso esteja presente).

×