Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package cps;
- import java.util.function.Function;
- public interface Re {
- boolean match(String s, Function<String, Boolean> kont);
- default boolean match(String s) {
- return match(s, kont -> true);
- }
- /**
- * 匹配字符
- * @param charLiteral
- * @return
- */
- static Re lit(char charLiteral) {
- return (s, kont) -> {
- if (s.isEmpty()) {
- return false;
- }
- return charLiteral == s.charAt(0) && kont.apply(s.substring(1));
- };
- }
- /**
- * 按顺序匹配a b
- * @param a
- * @param b
- * @return
- */
- static Re seq(Re a, Re b) {
- return (s, kont) -> a.match(s, rest -> b.match(rest, kont));
- }
- /**
- * 匹配a或b
- * @param a
- * @param b
- * @return
- */
- static Re either(Re a, Re b) {
- return (s, kont) -> a.match(s, kont) || b.match(s, kont);
- }
- /**
- * 匹配0到N个
- * @param re
- * @return
- */
- static Re star(Re re) {
- return (s, kont) -> re.match(s, rest -> star(re).match(rest, kont))
- || kont.apply(s);
- }
- static Re atLeastOne(Re re) {
- return seq(re, star(re));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement