还没实现现在通行的正则语法,但已实现它的等价情势,下一步只需支撑自动编译即可。
克莱尼代数中的三种运算:选择、顺序、重复,分别对应 Object 的 key,子 Object,引用到父 Object 的子 Object。
var r = {}, a = {b: {b: ""}};
a.a = a; // a*bb
r.a = a; // aa*bb
var c = {c: {c: {c: {"": "", c: {"": "", c: ""}}}}}; // c{3,5}
var l = {l: {i: {l: {y: ""}}, a: {d: {y: ""}}}}; // lily|lady
function test(s, r) {
for (var i in s) {
var j = s[i];
if (typeof r[j] !== "undefined")
r = r[j];
else
return false;
}
if (r === "")
return true;
if (r[""] === "")
return true;
return false;
}
console.log(test("aaaabb", r), test("bb", r), test("aaaa", r));
console.log(test("aaaabb", a), test("bb", a), test("aaaa", a));
console.log(test("cc", c), test("ccc", c), test("cccc", c), test("ccccc", c), test("cccccc", c));
console.log(test("lily", l), test("lady", l), test("ladysmith", l), test("lad", l));