Advertisement
Guest User

Untitled

a guest
Aug 21st, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.18 KB | None | 0 0
  1. package cps;
  2.  
  3. import java.util.function.Function;
  4.  
  5. public interface Re {
  6.  
  7. boolean match(String s, Function<String, Boolean> kont);
  8. default boolean match(String s) {
  9. return match(s, kont -> true);
  10. }
  11.  
  12. /**
  13. * 匹配字符
  14. * @param charLiteral
  15. * @return
  16. */
  17. static Re lit(char charLiteral) {
  18. return (s, kont) -> {
  19. if (s.isEmpty()) {
  20. return false;
  21. }
  22. return charLiteral == s.charAt(0) && kont.apply(s.substring(1));
  23. };
  24. }
  25.  
  26. /**
  27. * 按顺序匹配a b
  28. * @param a
  29. * @param b
  30. * @return
  31. */
  32. static Re seq(Re a, Re b) {
  33. return (s, kont) -> a.match(s, rest -> b.match(rest, kont));
  34. }
  35.  
  36. /**
  37. * 匹配a或b
  38. * @param a
  39. * @param b
  40. * @return
  41. */
  42. static Re either(Re a, Re b) {
  43. return (s, kont) -> a.match(s, kont) || b.match(s, kont);
  44. }
  45.  
  46. /**
  47. * 匹配0到N个
  48. * @param re
  49. * @return
  50. */
  51. static Re star(Re re) {
  52. return (s, kont) -> re.match(s, rest -> star(re).match(rest, kont))
  53. || kont.apply(s);
  54. }
  55.  
  56. static Re atLeastOne(Re re) {
  57. return seq(re, star(re));
  58. }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement