Advertisement
Guest User

Untitled

a guest
Jan 19th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 KB | None | 0 0
  1. trait Rule {}
  2.  
  3. object ALPHA extends Rule
  4.  
  5. object DIGIT extends Rule
  6.  
  7. object OCTET extends Rule
  8.  
  9. case class Alternative(rules: Rule*) extends Rule
  10.  
  11. case class Concatenation(rules: Rule*) extends Rule
  12.  
  13. case class SpecificRepetition(rule: Rule, n: Int) extends Rule
  14.  
  15. case class VariableRepetition(rule: Rule, lower: Option[Int] = None, upper: Option[Int] = None) extends Rule
  16.  
  17. case class Terminal(value: String) extends Rule
  18.  
  19. case class Range(lower: Char, upper: Char) extends Rule
  20.  
  21. case class Single(c: Char) extends Rule
  22.  
  23. object CookieDateParser {
  24. val timefield = VariableRepetition(DIGIT, Some(1), Some(2))
  25. val hmsTime = Concatenation(timefield, Terminal(":"), timefield, Terminal(":"), timefield)
  26. val nonDigit = Alternative(Range(0x00, 0x2f), Range(0x3a, 0xff))
  27. val time = Concatenation(hmsTime, Concatenation(nonDigit, VariableRepetition(OCTET)))
  28. val year = Concatenation(
  29. VariableRepetition(DIGIT, Some(2), Some(4)),
  30. Concatenation(nonDigit, VariableRepetition(OCTET))
  31. )
  32. val month = Concatenation(
  33. Alternative(
  34. Terminal("jan"), Terminal("feb"), Terminal("mar"), Terminal("apr"), Terminal("may"), Terminal("jun"),
  35. Terminal("jul"), Terminal("aug"), Terminal("sep"), Terminal("oct"), Terminal("nov"), Terminal("dev")
  36. ),
  37. VariableRepetition(OCTET)
  38. )
  39. val dayOfMonth = Concatenation(
  40. VariableRepetition(DIGIT, Some(1), Some(2)),
  41. Concatenation(nonDigit, VariableRepetition(OCTET))
  42. )
  43. val nonDelimiter = Alternative(
  44. Range(0x00, 0x08),
  45. Range(0x0a, 0x1f),
  46. DIGIT,
  47. Terminal(":"),
  48. ALPHA,
  49. Range(0x7f, 0xff)
  50. )
  51. val delimiter = Alternative(
  52. Single(0x09),
  53. Range(0x20, 0x2f),
  54. Range(0x3b, 0x40),
  55. Range(0x5b, 0x60),
  56. Range(0x7b, 0x7e)
  57. )
  58. val dateToken = VariableRepetition(nonDelimiter, Some(1))
  59. val dateTokenList = Concatenation(
  60. dateToken,
  61. VariableRepetition(Concatenation(VariableRepetition(delimiter, Some(1)), dateToken))
  62. )
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement