Portuguese, Brazilian subtitles

← 05xps-05 Parsing Javascript Expressions Solution

05xps-05 Parser para Expressões JavaScript - Solução

Get Embed Code
3 Languages

Showing Revision 2 created 02/19/2013 by Lucilia Figueiredo.

  1. Neste problema, vamos construir parte do nosso
  2. parser para JavaScript, que trata expressões JavaScript.
  3. Isso é muito fácil e direto, assim como
  4. o último problema, onde essencialmente
  5. enumeramos todas as regras que predefinimos
  6. para nossa linguagem JavaScript. Então, vamos direto
  7. ao IDE.
  8. Aqui temos que fornecer o código para
  9. o problema e, se olharmos mais de perto, veremos que
  10. quase todas as regras do parser estão enumeradas,
  11. exatamente como deveriam ser: temos "identifier",
  12. "numbers", "strings", "true" e "false", como tratar a
  13. palavra chave "not", e depois expressões.
  14. Temos também a relação de precedência de
  15. e de associatividade para cada uma
  16. dessas operações.
  17. Então, temos realmente tudo o que precisamos, na
  18. descrição do problema, para este problema.
  19. E, como você pode ver, eu já preenchi
  20. a ordem de precedência das operações.
  21. E isso é obtido diretamente do comentário
  22. dado no problema, onde "or" é listado na
  23. precedência mais baixa, e prosseguimos até
  24. a divisão, aqui. Eu adicionei também o "not",
  25. para fazer isso funcionar.
  26. Então vamos começar a preencher as regras.
  27. Minha primeira regra vai tratar parênteses: se temos um casamento de
  28. parênteses à esquerda e à direita, a expressão correspondente
  29. é simplesmente o conteúdo dos parênteses -- bem fácil.
  30. E agora eu tenho 4 regras para
  31. alguns dos nossos valores literais: temos "number" --
  32. vamos dizer "number" e o conteúdo disso --
  33. temos "string" -- simplesmente dizemos "string" -- e,
  34. se casamos com "true" ou "false", vamos retornar
  35. as tuplas especificadas. Se vemos um "not",
  36. então simplesmente temos na nossa árvore do parser a palavra "not"
  37. e então o conteúdo que está sendo negado.
  38. Depois disso, temos mais ou menos uma dúzia de regras
  39. para operadores binários: adição, subtração, multiplicação, módulo,
  40. divisão etcetera etcetera. E, para economizar espaço --
  41. eu poderia enumerar cada função, mas quero
  42. um atalho -- eu digo que, se casamos com
  43. qualquer dessas coisas, eu chamo uma operação binária,
  44. sendo o primeiro elemento o operando à esquerda
  45. da operação binária, a entrada seguinte
  46. na tupla é a operação a ser usada,
  47. e a última é
  48. o operando à direita da operação binária.
  49. E agora eu tenho expressões para chamada de funções,
  50. não para declarações, que nós vimos no último problema.
  51. Uma chamada de função será um
  52. identificador, com argumentos opcionais, entre parênteses.
  53. E o código para tratar argumentos opcionais
  54. é quase exatamente o mesmo que
  55. o código que usamos para tratar argumentos opcionais
  56. na declaração de função. De fato, eu acho que é
  57. exatamente o mesimo. E, com tiudo isso, terminamos.
  58. São mais ou menos 50 linhas de codigo e estamos felizes.