Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Let’s write a parser! [RUG::B edition]

Let’s write a parser! [RUG::B edition]

Denis Defreyne

May 12, 2016
Tweet

More Decks by Denis Defreyne

Other Decks in Programming

Transcript

  1. But how do you know that I am Denis? I

    told you. I wrote it down. Tobi introduced me. You might have seen me before. Etc. 5
  2. 17 H e l l o 0 1 2 3

    4 char("H").apply("Hello")
  3. 17 H e l l o 0 1 2 3

    4 char("H").apply("Hello")
  4. 17 H e l l o 0 1 2 3

    4 char("H").apply("Hello")
  5. 17 H e l l o 0 1 2 3

    4 char("H").apply("Hello") Success(position = 1)
  6. 18 A d i ó s 0 1 2 3

    4 char("H").apply("Adiós")
  7. 18 A d i ó s 0 1 2 3

    4 char("H").apply("Adiós")
  8. 18 A d i ó s 0 1 2 3

    4 char("H").apply("Adiós")
  9. Failure(position = 0) 18 A d i ó s 0

    1 2 3 4 char("H").apply("Adiós")
  10. H e l l o 21 0 1 2 3

    4 seq(char("H"), char("e")).apply("Hello")
  11. H e l l o 21 0 1 2 3

    4 seq(char("H"), char("e")).apply("Hello")
  12. H e l l o 21 0 1 2 3

    4 seq(char("H"), char("e")).apply("Hello")
  13. H e l l o 21 0 1 2 3

    4 seq(char("H"), char("e")).apply("Hello")
  14. H e l l o 21 0 1 2 3

    4 seq(char("H"), char("e")).apply("Hello") Success(position = 2)
  15. H e l l o 24 0 1 2 3

    4 string("Hello").apply("Hello")
  16. H e l l o 24 0 1 2 3

    4 string("Hello").apply("Hello")
  17. H e l l o 24 0 1 2 3

    4 string("Hello").apply("Hello")
  18. H e l l o 24 0 1 2 3

    4 string("Hello").apply("Hello") Success(position = 5)
  19. H e l l o 26 0 1 2 3

    4 seq(string("Hello"), eof).apply("Hello")
  20. H e l l o 26 0 1 2 3

    4 seq(string("Hello"), eof).apply("Hello")
  21. H e l l o 26 0 1 2 3

    4 seq(string("Hello"), eof).apply("Hello")
  22. H e l l o 26 0 1 2 3

    4 seq(string("Hello"), eof).apply("Hello")
  23. H e l l o 26 0 1 2 3

    4 seq(string("Hello"), eof).apply("Hello") Success(position = 5)
  24. 27 0 1 2 3 4 5 H e l

    l o ! seq(string("Hello"), eof).apply("Hello!")
  25. 27 0 1 2 3 4 5 H e l

    l o ! seq(string("Hello"), eof).apply("Hello!")
  26. 27 0 1 2 3 4 5 H e l

    l o ! seq(string("Hello"), eof).apply("Hello!")
  27. 27 0 1 2 3 4 5 H e l

    l o ! seq(string("Hello"), eof).apply("Hello!")
  28. 27 0 1 2 3 4 5 Failure(position = 5)

    H e l l o ! seq(string("Hello"), eof).apply("Hello!")
  29. A d i ó s 29 0 1 2 3

    4 alt(char("H"), char("A")).apply("Adiós")
  30. A d i ó s 29 0 1 2 3

    4 alt(char("H"), char("A")).apply("Adiós")
  31. A d i ó s 29 0 1 2 3

    4 alt(char("H"), char("A")).apply("Adiós")
  32. A d i ó s 29 0 1 2 3

    4 alt(char("H"), char("A")).apply("Adiós") Success(position = 1)
  33. a , a , b 35 0 1 2 3

    4 intersperse(char("a"), char(",")).apply("a,a,b")
  34. a , a , b 35 0 1 2 3

    4 intersperse(char("a"), char(",")).apply("a,a,b")
  35. a , a , b 35 0 1 2 3

    4 intersperse(char("a"), char(",")).apply("a,a,b")
  36. a , a , b 35 0 1 2 3

    4 intersperse(char("a"), char(",")).apply("a,a,b")
  37. a , a , b 35 0 1 2 3

    4 intersperse(char("a"), char(",")).apply("a,a,b") Success(position = 3)
  38. 48

  39. 55

  40. 56

  41. 60 My name is Denis Defreyne. Ready to parse your

    questions. Find me at [email protected], or @ddfreyne on Twitter.