Portuguese, Brazilian subtitles

← 01ps-01 General Concepts Solution

01ps-01 Conceitos Gerais - Solução

Get Embed Code
3 Languages

Showing Revision 1 created 12/06/2012 by Lucilia Figueiredo.

  1. Olá, eu sou Peter Chapman, instrutor assistente
  2. deste curso de linguagens de programação, "Construindo um web browser".
  3. Pode ser que você já tenha me visto nos foruns e gerenciando
  4. o curso de modo geral. Mas uma das principais coisas que vou fazer,
  5. ajudando você a aprender neste curso, é explicar as respostas dos exercícios.
  6. Dito isto, vamos começar com o primeiro nosso primeiro problema, da 1a. lista de exercícios.
  7. É uma questão de múltipla escolha sobre conceitos gerais desta primeira unidade.
  8. A opção 1 diz: "Páginas web podem controlar seu comportamento e aparência
  9. por meio de código JavaScript embutido nelas".
  10. Isso de fato é verdade.
  11. Quase toda página web que você vê todo dia
  12. tem milhares de linhas de JavaScript, que tornam a página mais legal e interativa, e mais rápida.
  13. Se você visitar o nosso site, sem que JavaScript esteja habilitado,
  14. não poderá fazer quase nada.
  15. Nada iria carregar. Nada seria interativo.
  16. E não é exagero dizer que JavaScript é a base
  17. de aplicações web modernas.
  18. Opção 2: Enquanto sentenças em inglês podem ser quebradas em palavras,
  19. HTML e JavaScript não podem".
  20. Isso é falso.
  21. Vejamos um trecho de HTML para mostrar porque.
  22. Aqui, podemos quebrar este trecho HTML em partes menores,
  23. ou seja, o início da tag bold,
  24. o o próprio texto, isto é, "Irvin", e o final da tag bold.
  25. Individualmente, cada uma dessas coisas tem um significado,
  26. do mesmo modo que esta sentença acima. A palavra "and" (e)
  27. significa que `não podem' aplica-se tanto a JavaScript como a HTML.
  28. Algumas dessas palavras têm significado semântico.
  29. Outras determinam a estrutura sintática.
  30. De qualquer modo, são palavras; apenas pertencem a linguagens diferentes.
  31. Opção 3: "Para todo programa Python que usa re.findall(), existe um outro
  32. programa Python que não usa re.findall mas obtém os mesmos resultados".
  33. Essa afirmação é verdadeira.
  34. Antes de lidar com re.findall(), vamos pensar num exemplo alternativo e raciocinar sobre ele.
  35. Digamos que, ao invés de querermos encontra tudo, queremos apenas encontrar um.
  36. Isto é, dada uma expressão regular e um texto de entrada,
  37. queremos determinar se o texto casa
  38. exatamente com a expressão regular. Podemos fazer isso
  39. usando as ferramentas que desenvolvemos nesta unidade, em particular,
  40. a função fsmsim.
  41. O que temos que fazer é criar uma representação de um autômato de estados finito
  42. para essa expressão regular. E isso é bem fácil.
  43. Então processamos o texto de entrada com este autômato, usando fsmsim.
  44. Portanto, você teria que representar o autômato usando o dicionário
  45. que descrevemos na aula e, se o processamento do texto de entrada termina em um estado de aceitação,
  46. então podemos dizer que casa.
  47. É assim que usamos fsmsim para determinar o que casa com uma expressão regular.
  48. Mas findall() faz algo um pouco diferente.
  49. Digamos que você tenha este código.
  50. Este comando toma uma expressão regular que casa com números,
  51. e um string de entrada que contém dois número, 12 e 34.
  52. O que findall retorna é assim:
  53. ele retorna dois strings, 12 e 34.
  54. Podemos usar fsmsim para fazer um casamento.
  55. Se dermos apenas o string "12", então ok.
  56. Mas queremos dar uma interpretação um pouco diferente, usando findall,
  57. e ainda assim podemos usar fsmsim para fazer isso.
  58. Digamos que temos nossa `caixa preta' fsmsim.
  59. E que ela tem uma representação para esta expressão regular.
  60. Temos também um string, que consiste de 5 caracteres.
  61. O que vamos fazer é dar como entrada o primeiro caractere
  62. para o nosso simulador fsmsim.
  63. `1' casa com a expressão regular,
  64. então, temos um `match` com `1'.
  65. Para casar strings maiores, vamos tentar adicionar mais um caractere,
  66. dando como entrada `12' para nosso simulador de expressão regular.
  67. `12' casa -- muito bem.
  68. Agora vamos tentar `12+'.
  69. `12+' não casa. Portanto, descobrimos que `12' é o maior
  70. prefixo que casa com esta expressão regular, e será então um dos nossos resultados.
  71. Agora voltamos, e tentamos `+'.
  72. `+' não casa.
  73. Então tentamos `+3', que também não casa.
  74. Isso não é um número. E `+34' também não casa.
  75. Então desistimos de `+' e tentamos apenas `3'.
  76. `3' casa. Então tentamos o `4'.
  77. `34' casa, e como não temos mais caracteres na entrada, terminamos.
  78. E é assim que você pode usar fsmsim para simular
  79. exatamente a mesma funcionalidade de findall.
  80. Opção 4: "Toda expressão regular que não envolva
  81. + ou * casa um um conjunto finito de strings".
  82. Isso é verdade.
  83. Nas expressões regulares que definimos na aula,
  84. o único mecanismo de repetição é por meio de + ou *.
  85. Podemos usar outros mecanismos, como | (ou)
  86. ou ? (opcional), mas isso não nos dá
  87. os recursos que obtemos com os operadores de repetição.
  88. Posso enumerar vários tipos diferentes na minha expressão regular,
  89. vários strings diferentes, mas nunca um número infinito deles.
  90. Portanto, se você não tem + ou *,
  91. você está limitado a um conjunto finito de strings.
  92. Pode ser um conjunto finito muito grande, mas ainda será finito.