YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Portuguese, Brazilian subtitles

← 02-27 Strip Snipping

02-27 Tirando a Casca

Get Embed Code
3 Languages

Showing Revision 2 created 03/04/2013 by Lucilia Figueiredo.

  1. Você deve ter percebido uma certa redundância
  2. no nosso tratamento de strings entre aspas.
  3. Retornamos todo o string que foi casado,
  4. que inclui as aspas duplas no início e no fim.
  5. Mas, em certo sentido, as aspas não são parte do significada,
  6. elas ocorrem no início e no fim apenas para marcar onde o string começa e termina.
  7. Este é o valor default do nosso token,
  8. mas queremos cortar este string,
  9. eliminando as aspas que ocorrem no início e no fim.
  10. Aqui temos um exemplo de uma definição de token
  11. que faze exatamente isso.
  12. Depois de casar o tipo correto de string,
  13. pegamos o valor do token --
  14. o string inteiro --
  15. e vamos usar seleção de substring,
  16. começando no caractere 1 --
  17. este vai ser o caractere de índice 1 --
  18. e indo até, mas não inclusive,
  19. o caractere na posição -1.
  20. Se você não viu este truque em Python antes, isso pode parecer um pouco estranho,
  21. mas é possível contar do fim para o início do string,
  22. usando números negativos.
  23. Portanto, este é de fato o caractere na posição -1.
  24. E, lembre-se que o substring incluído
  25. começa em 1 e vai até, mas não inclusive, o caractere da posição -1.
  26. Portanto, isso é tudo o que vai de `q'
  27. até `s' em `strings' --
  28. ou, em outras palavras, exatamente o que desejamos.
  29. Truque legal, né?
  30. Então, agora vou mostrar como construir
  31. um analisador léxico -- lembre-se:
  32. é simplesmente uma sequência de definições de tokens.
  33. Vou escrever o código Python
  34. e você vai acompanhar comigo.
  35. Esta linha no início -- a cláusula import -- é semelhante a import re.
  36. Ela informa ao compilador Python onde encontrar o software,
  37. ou as bibliotecas, que vão ser utilizadas.
  38. Assim como expressões regulares são chamadas re, de modo conciso,
  39. um analisador léxico é chamado lex, para economizar espaço.
  40. E agora vou escrever uma lista de todos os tokens que nos interessam.
  41. Aqui, estou interessado apenas nos 6 de que falamos anteriormente:
  42. LANGLE, LANGLESLASH, RANGLE --
  43. estas são 3 tags --
  44. EQUAL, STRINGS (entre aspas),
  45. e WORD -- qualquer outra palavra.
  46. Vou também utilizar um pequeno atalho.
  47. Antes, usamos um token WHITESPACE,
  48. mas se você quiser, pode utilizar a palavra t_ignore ao invés disso
  49. e, implicitamente, estaremos ignorando tudo que case com essa expressão regular.
  50. Aqui está minha primeira regra de definição de token.
  51. é para LANGLSLAH.
  52. Aqui está a expressão regular que ele casa,
  53. e retornamos o texto, inalterado.
  54. Aqui outra regra, para LANGLE,
  55. a expressão que ele casa, e retornamos o texto, inalterado.
  56. E você deve notar que a regra LANGLESLASH vem antes
  57. dessa, no arquivo do programa.
  58. E é assim porque queremos que essa tenha preferência.
  59. Se eu vejo < seguido de /,
  60. quero casar com o token LANGLESLASH,
  61. e não com LANGLE seguido, digamos, de WORD.
  62. Mais sobre isso daqui a pouco. Vou testar e mostrar para você.
  63. Aqui está nossa regra RANGLE.
  64. Aqui nossa regra para o token EQUAL.
  65. Note que, embora elas sejam lonhas --
  66. ocupam um certo espaço -- elas não são complicadas.
  67. Em essência, isso consiste em listar 5 expressões regulares.
  68. Aqui está uma.
  69. Esta é um pouco mais complicada -- é a regra para o token STRING.
  70. Aqui está a expressão regular que deve casar,
  71. e aqui estou eliminando
  72. as aspas duplas em torno do string,
  73. como vimos antes.
  74. Finalmente, aqui está nossa definição para WORD.
  75. E agora o que queremos é usar
  76. essas expressões regulares, juntas -- essas definições de tokens --
  77. para `quebrar' uma página web.
  78. Então, aqui, vou definir uma variável que contém o texto de uma página web hipotética.
  79. "This is my webpage!"
  80. Vamos tornar isso mais interessante: ho, ho, isso é pelo menos 10% mais interessante!
  81. Essa chamada de função informa nossa biblioteca de análise léxica
  82. que queremos usar todas essas definições de tokens acima,
  83. para construir um analisador léxico e quebrar strings.
  84. Essa chamada de função indica qual o string que será quebrado.
  85. Queremos quebrar esta página web:
  86. "This is my webpage!"
  87. Agora, lembre-se que a saída do analisador léximo
  88. é uma lista de tokens.
  89. Eu quero imprimir cada elemento desta lista.
  90. Esta chamada -- .token -- retorna o próximo token disponível.
  91. Se não existirem mais tokens,
  92. então saímos fora deste loop.
  93. Caso contrário, imprimimos o token.
  94. Bem, vejamos que tipo de saída obtemos.
  95. A chance de eu ter escrito isto sem cometer erros,
  96. de cara, a partir do zero, é quase zero.
  97. Vamos ver o que acontece.
  98. Oh! Nem acredito!
  99. Podemos ver a saída aqui embaixo:
  100. LexToken WORD, 'T', 'h', í', 's'
  101. mas isso não era a saída que esperávamos!
  102. Oh, aqui está o erro que eu cometi:
  103. agora, eu tenho apenas um caractere em t_WORD,
  104. e se voc6e olhar aqui embaixo, ao invés de ver
  105. a palavra "ThIs" -- de "This is my webpage! " --
  106. temos cada letra separadamente.
  107. Vamos consertar isso.
  108. E agora temos uma saída mais pareceida com o que esperávamos.
  109. Noss primeiro tokens é "This";
  110. nosso token seguinte é um WORD -- "is".
  111. Então vemos LANGLE,
  112. um WORD -- "b" -- que indica negrito,
  113. o LANGLE, um WORD -- "my",
  114. o LANGLESLASH,
  115. e então o WORD "webpage".